diff --git a/tools/tools/git/HOWTO b/tools/tools/git/HOWTO --- 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 @@ 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 --- 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 < -# -# 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 --- 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 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 -