]> git.ipfire.org Git - thirdparty/git.git/blame - git-checkout-script
[PATCH] Build commands through object files
[thirdparty/git.git] / git-checkout-script
CommitLineData
303e5f4c 1#!/bin/sh
b33e9666
LT
2. git-sh-setup-script || die "Not a git archive"
3
303e5f4c 4old=$(git-rev-parse HEAD)
e8b11749 5new=
a79944d7 6force=
e8b11749 7branch=
91dcdfd3 8newbranch=
e8b11749
LT
9while [ "$#" != "0" ]; do
10 arg="$1"
11 shift
12 case "$arg" in
91dcdfd3
LT
13 "-b")
14 newbranch="$1"
15 shift
16 [ -z "$newbranch" ] &&
17 die "git checkout: -b needs a branch name"
18 [ -e "$GIT_DIR/refs/heads/$newbranch" ] &&
19 die "git checkout: branch $newbranch already exists"
20 ;;
303e5f4c 21 "-f")
e8b11749 22 force=1
303e5f4c
LT
23 ;;
24 *)
f6e1a4d6 25 rev=$(git-rev-parse --verify "$arg^0") || exit
e8b11749
LT
26 if [ -z "$rev" ]; then
27 echo "unknown flag $arg"
28 exit 1
29 fi
30 if [ "$new" ]; then
31 echo "Multiple revisions?"
32 exit 1
33 fi
34 new="$rev"
9661c256 35 if [ -f "$GIT_DIR/refs/heads/$arg" ]; then
e8b11749
LT
36 branch="$arg"
37 fi
38 ;;
303e5f4c
LT
39 esac
40 i=$(($i+1))
41done
dc148411 42[ -z "$new" ] && new=$old
303e5f4c 43
91dcdfd3
LT
44#
45# If we don't have an old branch that we're switching to,
46# and we don't have a new branch name for the target we
47# are switching to, then we'd better just be checking out
48# what we already had
49#
50[ -z "$branch$newbranch" ] &&
51 [ "$new" != "$old" ] &&
52 die "git checkout: you need to specify a new branch name"
53
a79944d7 54if [ "$force" ]
303e5f4c
LT
55then
56 git-read-tree --reset $new &&
a79944d7 57 git-checkout-cache -q -f -u -a
303e5f4c 58else
a79944d7 59 git-read-tree -m -u $old $new
ef0bfa25
LT
60fi
61
62#
63# Switch the HEAD pointer to the new branch if it we
64# checked out a branch head, and remove any potential
65# old MERGE_HEAD's (subsequent commits will clearly not
66# be based on them, since we re-set the index)
67#
68if [ "$?" -eq 0 ]; then
91dcdfd3
LT
69 if [ "$newbranch" ]; then
70 echo $new > "$GIT_DIR/refs/heads/$newbranch"
71 branch="$newbranch"
72 fi
ef0bfa25
LT
73 [ "$branch" ] && ln -sf "refs/heads/$branch" "$GIT_DIR/HEAD"
74 rm -f "$GIT_DIR/MERGE_HEAD"
75fi