summaryrefslogtreecommitdiff
path: root/git-merge-one-file.sh
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-10-09 05:48:06 (GMT)
committerJunio C Hamano <junkio@cox.net>2006-10-28 00:16:39 (GMT)
commited93b449c5e13a70beb7f0ae02fb6da95e42a805 (patch)
tree717a934889e5f29199b460ab720e0e227ee4aac3 /git-merge-one-file.sh
parent887a612fef942dd3e7dae452e2dc582738b0fb41 (diff)
downloadgit-ed93b449c5e13a70beb7f0ae02fb6da95e42a805.zip
git-ed93b449c5e13a70beb7f0ae02fb6da95e42a805.tar.gz
git-ed93b449c5e13a70beb7f0ae02fb6da95e42a805.tar.bz2
merge: loosen overcautious "working file will be lost" check.
The three-way merge complained unconditionally when a path that does not exist in the index is involved in a merge when it existed in the working tree. If we are merging an old version that had that path tracked, but the path is not tracked anymore, and if we are merging that old version in, the result will be that the path is not tracked. In that case we should not complain. Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'git-merge-one-file.sh')
-rwxr-xr-xgit-merge-one-file.sh16
1 files changed, 15 insertions, 1 deletions
diff --git a/git-merge-one-file.sh b/git-merge-one-file.sh
index fba4b0c..c49e4c6 100755
--- a/git-merge-one-file.sh
+++ b/git-merge-one-file.sh
@@ -23,6 +23,12 @@ case "${1:-.}${2:-.}${3:-.}" in
"$1.." | "$1.$1" | "$1$1.")
if [ "$2" ]; then
echo "Removing $4"
+ else
+ # read-tree checked that index matches HEAD already,
+ # so we know we do not have this path tracked.
+ # there may be an unrelated working tree file here,
+ # which we should just leave unmolested.
+ exit 0
fi
if test -f "$4"; then
rm -f -- "$4" &&
@@ -34,8 +40,16 @@ case "${1:-.}${2:-.}${3:-.}" in
#
# Added in one.
#
-".$2." | "..$3" )
+".$2.")
+ # the other side did not add and we added so there is nothing
+ # to be done.
+ ;;
+"..$3")
echo "Adding $4"
+ test -f "$4" || {
+ echo "ERROR: untracked $4 is overwritten by the merge."
+ exit 1
+ }
git-update-index --add --cacheinfo "$6$7" "$2$3" "$4" &&
exec git-checkout-index -u -f -- "$4"
;;