diff options
author | Junio C Hamano <junkio@cox.net> | 2006-09-27 02:06:31 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-09-27 02:06:31 -0700 |
commit | cede7526534c47436de17977eb39e55aa8c1e646 (patch) | |
tree | 74296304f26c57dc9727e068374aea2a6a2df794 /git-branch.sh | |
parent | ac5409e420e5fdd7c4a381f873ffcedfb83d7117 (diff) | |
download | git-cede7526534c47436de17977eb39e55aa8c1e646.tar.gz |
update a few Porcelain-ish for ref lock safety.
This updates the use of git-update-ref in git-branch, git-tag
and git-commit to make them safer in a few corner cases as
demonstration.
- git-tag makes sure that the named tag does not exist, allows
you to edit tag message and then creates the tag. If a tag
with the same name was created by somebody else in the
meantime, it used to happily overwrote it. Now it notices
the situation.
- git-branch -d and git-commit (for the initial commit) had the
same issue but with smaller race window, which is plugged
with this.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'git-branch.sh')
-rwxr-xr-x | git-branch.sh | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/git-branch.sh b/git-branch.sh index 2600e9c4a8..4379a07210 100755 --- a/git-branch.sh +++ b/git-branch.sh @@ -42,8 +42,7 @@ If you are sure you want to delete it, run 'git branch -D $branch_name'." esac ;; esac - rm -f "$GIT_DIR/logs/refs/heads/$branch_name" - rm -f "$GIT_DIR/refs/heads/$branch_name" + git update-ref -d "refs/heads/$branch_name" "$branch" echo "Deleted branch $branch_name." done exit 0 @@ -112,6 +111,7 @@ rev=$(git-rev-parse --verify "$head") || exit git-check-ref-format "heads/$branchname" || die "we do not like '$branchname' as a branch name." +prev='' if git-show-ref --verify --quiet -- "refs/heads/$branchname" then if test '' = "$force" @@ -121,10 +121,11 @@ then then die "cannot force-update the current branch." fi + prev=`git rev-parse --verify "refs/heads/$branchname"` fi if test "$create_log" = 'yes' then mkdir -p $(dirname "$GIT_DIR/logs/refs/heads/$branchname") touch "$GIT_DIR/logs/refs/heads/$branchname" fi -git update-ref -m "branch: Created from $head" "refs/heads/$branchname" $rev +git update-ref -m "branch: Created from $head" "refs/heads/$branchname" "$rev" "$prev" |