Date: Fri, 11 Jun 2021 01:02:34 GMT From: Warner Losh <imp@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 07d72396f8fb - main - tools: Remove obsolete svn information. Message-ID: <202106110102.15B12YbP074502@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=07d72396f8fba2d1a253149436c3f76c49e6190d commit 07d72396f8fba2d1a253149436c3f76c49e6190d Author: Warner Losh <imp@FreeBSD.org> AuthorDate: 2021-06-11 00:50:46 +0000 Commit: Warner Losh <imp@FreeBSD.org> CommitDate: 2021-06-11 01:02:22 +0000 tools: Remove obsolete svn information. Reviewed by: jhb@ Differential Revision: https://reviews.freebsd.org/D30720 Sponsored by: Netflix --- tools/tools/git/HOWTO | 53 +---------- tools/tools/git/git-svn-init | 211 ----------------------------------------- tools/tools/git/git-svn-rebase | 57 ----------- tools/tools/git/importgit | 182 ----------------------------------- 4 files changed, 1 insertion(+), 502 deletions(-) diff --git a/tools/tools/git/HOWTO b/tools/tools/git/HOWTO index 3e95264789f0..160696c4d236 100644 --- a/tools/tools/git/HOWTO +++ b/tools/tools/git/HOWTO @@ -1,7 +1,7 @@ # $FreeBSD$ This directory contains tools intended to help committers use git when -interacting with standard FreeBSD project resources like Differential or svn. +interacting with standard FreeBSD project resources like Differential. I. arcgit @@ -113,54 +113,3 @@ commits. The intended workflow is: At this point, you are ready to commit your changes to head. The importgit script can be used to import your commits directly into git. - -II. importgit - -importgit is a script that can take a series of commits from git and commit them -to a svn repository. The script uses the git commit messages for the svn commit -message, which allows importgit to be fully automated. This does mean that once -you start importgit, it will start commit things to svn without giving any -further chance to sanity check what it's doing. - -importgit only supports importing commits that add or modify files. It does not -support importing commits that rename or delete files, to ensure that git's -rename detection heuristics do not introduce an error in the import process. -importgit also does not support importing merge commits. Only linear history -can be imported into svn. - -importgit must be run from a clean subversion checkout. You should ensure that -the working tree is up-to-date with "svn up" before running importgit. -importgit will run svn directly, so make sure that your ssh-agent is running -and has your ssh key loaded already. Run importgit as follows: - - $ importgit -r D1~..D2 -g /path/to/git/repo - -This will import every commit between D1 and D2, including both D1 and D2. The -invocation is very similar to the invocation given to arcgit but there is an -important point to note. When you rebased your commits as you followed steps 4 -and 5, the commit hashes of all of your commits changed, including C1 and C2. -You must go back and find the new commit hashes of your commits to pass to -importgit. Passing -r C1~..C2 would import your commits as they were *before* -your code review fixes were applied. - -III. git-svn-rebase - -git-svn-rebase is a script that helps you keep current when using git -plus subversion as outline in https://wiki.freebsd.org/GitWorkflow/GitSvn -since it's otherwise a pain to have many branches active. It will rebase -those branches that haven't been merged yet. Some tweaking may be needed -if you have other, weird branches in your tree (including any stable -branches). To run it just cd into the git subversion tree somewhere and -type - $ git-svn-rebase -and it will do its thing and leave the tree on the master branch. - -Your tree must be clean to start this, and while it tries to catch -some failures, not all of them have been allowed for. - -IV. git-svn-init -git-svn-init is a script that initializes the right git-svn connection as -outlined in https://wiki.freebsd.org/GitWorkflow/GitSvn. It would be a precursor -to the script git-svn-rebase. The script contains help, but generally you can -run the script with no arguments and it will attempt to set up both src and -ports repositories. diff --git a/tools/tools/git/git-svn-init b/tools/tools/git/git-svn-init deleted file mode 100755 index 3069514947f8..000000000000 --- a/tools/tools/git/git-svn-init +++ /dev/null @@ -1,211 +0,0 @@ -#!/bin/sh - -# $FreeBSD$ - -# SPDX-License-Identifier: BSD-2-Clause-FreeBSD -# -# Copyright(c) 2018 Intel Corporation. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -# SUCH DAMAGE. - -# This is the codified version of what was/is on the wiki page for using git in -# your workflow. It sets up proper repositories, with the correct remotes. - -# Environment variables which can be overridden if desired. Not worth -# parameterizing them. -GIT_IN_PATH=$(which git) -GIT=${GIT-${GIT_IN_PATH}} - -GIT_DOCS_REPO=${GIT_DOCS_REPO-git://github.com/freebsd/freebsd-doc.git} -GIT_SVN_DOCS_ROOT_URI=${GIT_SVN_DOCS_ROOT_URI-svn.freebsd.org/doc} -GIT_SVN_DOCS_URI=${GIV_SVN_DOCS_URI-repo.freebsd.org/doc} - -GIT_PORTS_REPO=${GIT_PORTS_REPO-git://github.com/freebsd/freebsd-ports.git} -GIT_SVN_PORTS_ROOT_URI=${GIT_SVN_PORTS_ROOT_URI-svn.freebsd.org/ports} -GIT_SVN_PORTS_URI=${GIT_SVN_PORTS_URI-repo.freebsd.org/ports} - -GIT_SRC_REPO=${GIT_SRC_REPO-git://github.com/freebsd/freebsd.git} -GIT_SVN_SRC_ROOT_URI=${GIT_SVN_SRC_ROOT_URI-svn.freebsd.org/base} -GIT_SVN_SRC_URI=${GIT_SVN_SRC_URI-repo.freebsd.org/base} - -GIT_SVN_DOCS_PUSH_URI=$GIT_SVN_DOCS_URI -GIT_SVN_PORTS_PUSH_URI=$GIT_SVN_PORTS_URI -GIT_SVN_SRC_PUSH_URI=$GIT_SVN_SRC_URI - -usage() -{ - cat <<EOF -Usage: git-svn-init: [-b base_path] [-n] [-p] [-s] - -git-svn-init will instantiate git repositories for src, and ports and connect -them to the upstream SVN repository. By default it will attempt to do this for -both ports and src under freebsd in the current working directory. --b Base path for the clone operation (default: freebsd) --n Dry run --p Exclude ports --s Exclude src --d Exclude docs - -EOF -} - -clone() -{ - echo "Cloning ${3}" - ${GIT} clone "$repo" -o upstream "$base"/${3} -} - -svn_init() -{ - # init git-svn to point to the subversion repo: - ${GIT} svn init -Thead --rewrite-root=svn+ssh://$1 svn+ssh://$2 . - - # Replace to use upstream instead of the default origin - # TODO: Do this from git svn init - ${GIT} config svn-remote.svn.fetch head:refs/remotes/upstream/trunk - - # Committers need to use proper URL for dcommit - ${GIT} config svn-remote.svn.pushurl svn+ssh://$3 - -} - -svn_check() -{ - cat <<EOF -[svn-remote "svn"] - url = svn+ssh://repo.freebsd.org/base - rewriteRoot = svn+ssh://svn.freebsd.org/base - pushurl = svn+ssh://repo.freebsd.org/base - fetch = head:refs/remotes/upstream/trunk -EOF - [ -z ${DRY_RUN} ] && grep -A4 'svn-remote "svn"' .git/config -} - -svn_connect() -{ - # Now make a git branch 'trunk' for git-svn to follow. What we want to - # do it set it to point to the final commit in upstream/svn_head. - local svn_head_sha=$(git show-ref upstream/svn_head|cut -d" " -f1) - ${GIT} update-ref refs/remotes/upstream/trunk $svn_head_sha # git-svn really needs this branch -} - -svn_fetch() -{ - ${GIT} svn fetch -} - -git_pulls() -{ - # Get pull requests from the repos: - ${GIT} config --add remote.upstream.fetch '+refs/pull/*:refs/remotes/upstream/pull/*' - ${GIT} fetch -} - -git_checkout() -{ - # Arrange to have 'master' reference 'trunk' - ${GIT} checkout trunk - - # Make master reference trunk - ${GIT} branch --force master trunk - ${GIT} checkout master -} - -rebase() -{ - ${GIT} svn rebase -} - -doit() -{ - local repo=${1} - local base=${2} - - if [ "$3" = "src" ] ; then - local svn_root_uri=$GIT_SVN_SRC_ROOT_URI - local svn_uri=$GIT_SVN_SRC_URI - local svn_push_uri=$GIT_SVN_SRC_PUSH_URI - elif [ "$3" = "docs" ] ; then - local svn_root_uri=$GIT_SVN_DOCS_ROOT_URI - local svn_uri=$GIT_SVN_DOCS_URI - local svn_push_uri=$GIT_SVN_DOCS_PUSH_URI - elif [ "$3" = "ports" ] ; then - local svn_root_uri=$GIT_SVN_PORTS_ROOT_URI - local svn_uri=$GIT_SVN_PORTS_URI - local svn_push_uri=$GIT_SVN_PORTS_PUSH_URI - fi - - clone ${repo} ${base} ${3} - - cd "$base"/${3} - svn_init $svn_root_uri $svn_uri $svn_push_uri - svn_check $(basename $svn_uri) # get base or ports, not src/ports. - svn_connect - svn_fetch - git_pulls - git_checkout - rebase - - cd - -} - -ports=1 -source=1 -docs=1 -while getopts "hb:nr:sdp" opt; do - case "$opt" in - b) - base_path="$OPTARG" - ;; - n) - DRY_RUN=1 - ;; - p) - ports=0 - ;; - s) - source=0 - ;; - d) - docs=0 - ;; - h|*) - usage - exit 0 - esac -done - -if [ ! -z "${DRY_RUN}" ] ; then - GIT='echo git' -fi - -if [ "$source" -eq 1 ]; then - doit ${GIT_SRC_REPO} ${base_path:-freebsd} "src" -fi - -if [ "$ports" -eq 1 ]; then - doit ${GIT_PORTS_REPO} ${base_path:-freebsd} "ports" -fi - -if [ "$docs" -eq 1 ]; then - doit ${GIT_DOCS_REPO} ${base_path:-freebsd} "docs" -fi diff --git a/tools/tools/git/git-svn-rebase b/tools/tools/git/git-svn-rebase deleted file mode 100755 index 7b31e327a4e5..000000000000 --- a/tools/tools/git/git-svn-rebase +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/sh - -# $FreeBSD$ - -# SPDX-License-Identifier: BSD-2-Clause-FreeBSD -# -# Copyright (c) 2018 M. Warner Losh <imp@FreeBSD.org> -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -# SUCH DAMAGE. - -# -# simple script to keep all my branches up to date while tracking -# FreeBSD (or any upstream svn source) with git. Run it often, and it -# will rebase all the branches so they don't get too stale. -# Takes no args, and acts goofy if you have really old branches -# which is why stable/* and mfc* are excluded. Caution to should be taken -# when using this. -# - -FAIL= -echo ----------------- Checkout master for svn rebase ------------ -git checkout master -echo ----------------- Rebasing our master to svn upstream ------------ -git svn rebase -for i in $(git branch --no-merge | grep -v stable/ | grep -v mfc); do - echo ----------------- Rebasing $i to the tip of master ------------ - git rebase master $i || { - echo "****************** REBASE OF $i FAILED, ABORTING *****************" - FAIL="$FAIL $i" - git rebase --abort - } -done -echo ----------------- Checkout out master again ------------ -git checkout master -git branch -if [ -n "$FAIL" ]; then - echo Failed branches: $FAIL -fi diff --git a/tools/tools/git/importgit b/tools/tools/git/importgit deleted file mode 100755 index 5149f2d9e157..000000000000 --- a/tools/tools/git/importgit +++ /dev/null @@ -1,182 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2015 Ryan Stone. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -# SUCH DAMAGE. -# -# $FreeBSD$ - -usage() -{ - echo "Usage: importgit <-c commit | -r c1..c2> -g /path/to/git/repo [-n]" >&2 -} - -error() -{ - local print_usage - - if [ "$1" = "-u" ] - then - shift - print_usage=1 - else - print_usage= - fi - - echo "$@" >&2 - if [ -n "$print_usage" ] - then - usage - fi - exit 1 -} - -unset git_repo range commit dry_run - -while getopts ":c:g:nr:" o -do - case "$o" in - c) - range="${OPTARG}~..${OPTARG}" - ;; - g) - git_repo=$OPTARG - ;; - n) - dry_run=1 - ;; - r) - range=$OPTARG - ;; - *) - error -u "Unrecognized argument '-$OPTARG'" - esac -done - -shift $((OPTIND - 1)) -OPTIND=1 - -if [ -n "$1" ] -then - error -u "Unrecognized argument $1" -fi - -if [ -z "$range" ] -then - error -u "-c or -r argument is mandatory" -fi - -if ! echo "$range" | egrep -qs '^[^.]+\.\.[^.]*$' -then - error -u "$range is not a range of commits. Did you mean '-c $range'?" -fi - -if [ -z "$git_repo" ] -then - error -u "-g <repo> argument is mandatory" -fi - -if ! type git > /dev/null 2> /dev/null -then - error "Install devel/git first" -fi - -GIT="git -C $git_repo" - -if ! $GIT rev-parse --git-dir 2> /dev/null > /dev/null -then - error "$git_repo does not seem to be a git repo" -fi - -if ! type svn > /dev/null 2> /dev/null -then - error "Install devel/subversion first" -fi - -if [ -n "$(svn status)" ] -then - error "Working tree is not clean" -fi - -if ! svn --non-interactive ls > /dev/null -then - error "Could not communicate with svn server. Is your ssh key loaded?" -fi - -$GIT log --format=%H $range | tail -r | while read -r commit -do - echo "Applying `$GIT show -s --oneline $commit`" - - if [ -n "$($GIT show --diff-filter=CDRTUXB $commit)" ] - then - error "Commit performed unsupported change (e.g. delete/rename)" - fi - - if [ "$($GIT show -s --format=%P $commit | wc -w)" -ne 1 ] - then - error "Cannot import merge commits" - fi - - $GIT diff --diff-filter=A --name-only \ - ${commit}~..$commit | while read -r newfile - do - if [ -f "$newfile" ] - then - error "New file $newfile already exists in tree" - fi - done - - # The previous while loop ran in a subshell, so we have to check if it - # exited with an error and bail out if so. - ret=$? - if [ "$ret" -ne 0 ] - then - exit $ret - fi - - if [ -n "$dry_run" ] - then - continue - fi - - $GIT show $commit | patch -p 1 -s || \ - error "Failed to apply patch" - - $GIT diff --diff-filter=A --name-only \ - ${commit}~..$commit | while read -r newfile - do - svn add --parents --depth=infinity $newfile || \ - error "Failed to add new file" - done - - # The previous while loop ran in a subshell, so we have to check if it - # exited with an error and bail out if so. - ret=$? - if [ "$ret" -ne 0 ] - then - exit $ret - fi - - $GIT show -s --format='%B' $commit | svn commit -F - || \ - error "Failed to commit" -done -
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202106110102.15B12YbP074502>