Enable ref log creation in git checkout -b.
Switch git checkout -b to use git-update-ref rather than echo and a shell I/O redirection. This is more in line with typical GIT commands and allows -b to be logged according to the normal ref logging rules. Added -l option to allow users to create the ref log at the same time as creating a branch. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>maint
parent
3a4b3f269c
commit
969d326d6b
|
@ -8,7 +8,7 @@ git-checkout - Checkout and switch to a branch
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
[verse]
|
[verse]
|
||||||
'git-checkout' [-f] [-b <new_branch>] [-m] [<branch>]
|
'git-checkout' [-f] [-b <new_branch> [-l]] [-m] [<branch>]
|
||||||
'git-checkout' [-m] [<branch>] <paths>...
|
'git-checkout' [-m] [<branch>] <paths>...
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
|
@ -37,6 +37,11 @@ OPTIONS
|
||||||
-b::
|
-b::
|
||||||
Create a new branch and start it at <branch>.
|
Create a new branch and start it at <branch>.
|
||||||
|
|
||||||
|
-l::
|
||||||
|
Create the new branch's ref log. This activates recording of
|
||||||
|
all changes to made the branch ref, enabling use of date
|
||||||
|
based sha1 expressions such as "<branchname>@{yesterday}".
|
||||||
|
|
||||||
-m::
|
-m::
|
||||||
If you have local modifications to one or more files that
|
If you have local modifications to one or more files that
|
||||||
are different between the current branch and the branch to
|
are different between the current branch and the branch to
|
||||||
|
|
|
@ -5,10 +5,13 @@ SUBDIRECTORY_OK=Sometimes
|
||||||
. git-sh-setup
|
. git-sh-setup
|
||||||
|
|
||||||
old=$(git-rev-parse HEAD)
|
old=$(git-rev-parse HEAD)
|
||||||
|
old_name=HEAD
|
||||||
new=
|
new=
|
||||||
|
new_name=
|
||||||
force=
|
force=
|
||||||
branch=
|
branch=
|
||||||
newbranch=
|
newbranch=
|
||||||
|
newbranch_log=
|
||||||
merge=
|
merge=
|
||||||
while [ "$#" != "0" ]; do
|
while [ "$#" != "0" ]; do
|
||||||
arg="$1"
|
arg="$1"
|
||||||
|
@ -24,6 +27,9 @@ while [ "$#" != "0" ]; do
|
||||||
git-check-ref-format "heads/$newbranch" ||
|
git-check-ref-format "heads/$newbranch" ||
|
||||||
die "git checkout: we do not like '$newbranch' as a branch name."
|
die "git checkout: we do not like '$newbranch' as a branch name."
|
||||||
;;
|
;;
|
||||||
|
"-l")
|
||||||
|
newbranch_log=1
|
||||||
|
;;
|
||||||
"-f")
|
"-f")
|
||||||
force=1
|
force=1
|
||||||
;;
|
;;
|
||||||
|
@ -44,6 +50,7 @@ while [ "$#" != "0" ]; do
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
new="$rev"
|
new="$rev"
|
||||||
|
new_name="$arg^0"
|
||||||
if [ -f "$GIT_DIR/refs/heads/$arg" ]; then
|
if [ -f "$GIT_DIR/refs/heads/$arg" ]; then
|
||||||
branch="$arg"
|
branch="$arg"
|
||||||
fi
|
fi
|
||||||
|
@ -51,9 +58,11 @@ while [ "$#" != "0" ]; do
|
||||||
then
|
then
|
||||||
# checking out selected paths from a tree-ish.
|
# checking out selected paths from a tree-ish.
|
||||||
new="$rev"
|
new="$rev"
|
||||||
|
new_name="$arg^{tree}"
|
||||||
branch=
|
branch=
|
||||||
else
|
else
|
||||||
new=
|
new=
|
||||||
|
new_name=
|
||||||
branch=
|
branch=
|
||||||
set x "$arg" "$@"
|
set x "$arg" "$@"
|
||||||
shift
|
shift
|
||||||
|
@ -114,7 +123,7 @@ then
|
||||||
cd "$cdup"
|
cd "$cdup"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -z "$new" ] && new=$old
|
[ -z "$new" ] && new=$old && new_name="$old_name"
|
||||||
|
|
||||||
# If we don't have an old branch that we're switching to,
|
# If we don't have an old branch that we're switching to,
|
||||||
# and we don't have a new branch name for the target we
|
# and we don't have a new branch name for the target we
|
||||||
|
@ -187,9 +196,11 @@ fi
|
||||||
#
|
#
|
||||||
if [ "$?" -eq 0 ]; then
|
if [ "$?" -eq 0 ]; then
|
||||||
if [ "$newbranch" ]; then
|
if [ "$newbranch" ]; then
|
||||||
leading=`expr "refs/heads/$newbranch" : '\(.*\)/'` &&
|
if [ "$newbranch_log" ]; then
|
||||||
mkdir -p "$GIT_DIR/$leading" &&
|
mkdir -p $(dirname "$GIT_DIR/logs/refs/heads/$branchname")
|
||||||
echo $new >"$GIT_DIR/refs/heads/$newbranch" || exit
|
touch "$GIT_DIR/logs/refs/heads/$branchname"
|
||||||
|
fi
|
||||||
|
git-update-ref -m "checkout: Created from $new_name" "refs/heads/$newbranch" $new || exit
|
||||||
branch="$newbranch"
|
branch="$newbranch"
|
||||||
fi
|
fi
|
||||||
[ "$branch" ] &&
|
[ "$branch" ] &&
|
||||||
|
|
Loading…
Reference in New Issue