Merge branch 'maint'
authorJunio C Hamano <gitster@pobox.com>
Thu, 12 Jul 2007 21:12:38 +0000 (14:12 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 12 Jul 2007 21:12:38 +0000 (14:12 -0700)
* maint:
GIT 1.5.2.4
Teach read-tree 2-way merge to ignore intermediate symlinks
git-gui: Work around bad interaction between Tcl and cmd.exe on ^{tree}
git-gui: Don't linewrap within console windows
git-gui: Correct ls-tree buffering problem in browser
git-gui: Skip nicknames when selecting author initials
git-gui: Ensure windows shortcuts always have .bat extension
git-gui: Include a Push action on the left toolbar
git-gui: Bind M1-P to push action
git-gui: Don't bind F5/M1-R in all windows
git-gui: Unlock the index when cancelling merge dialog
git-gui: properly popup error if gitk should be started but is not installed

Documentation/RelNotes-1.5.2.4.txt [new file with mode: 0644]
t/t2007-checkout-symlink.sh [new file with mode: 0755]
unpack-trees.c
diff --git a/Documentation/RelNotes-1.5.2.4.txt b/Documentation/RelNotes-1.5.2.4.txt
new file mode 100644 (file)
index 0000000..75cff47
--- /dev/null
@@ -0,0 +1,28 @@
+GIT v1.5.2.4 Release Notes
+==========================
+
+Fixes since v1.5.2.3
+--------------------
+
+ * Bugfixes
+
+   - "git-gui" bugfixes, including a handful fixes to run it
+     better on Cygwin/MSYS.
+
+   - "git checkout" failed to switch back and forth between
+     branches, one of which has "frotz -> xyzzy" symlink and
+     file "xyzzy/filfre", while the other one has a file
+     "frotz/filfre".
+
+   - "git prune" used to segfault upon seeing a commit that is
+     referred to by a tree object (aka "subproject").
+
+   - "git diff --name-status --no-index" mishandled an added file.
+
+   - "git apply --reverse --whitespace=warn" still complained
+     about whitespaces that a forward application would have
+     introduced.
+
+ * Documentation Fixes and Updates
+
+   - A handful documentation updates.
diff --git a/t/t2007-checkout-symlink.sh b/t/t2007-checkout-symlink.sh
new file mode 100755 (executable)
index 0000000..0526fce
--- /dev/null
@@ -0,0 +1,50 @@
+#!/bin/sh
+#
+# Copyright (c) 2007 Junio C Hamano
+
+test_description='git checkout to switch between branches with symlink<->dir'
+
+. ./test-lib.sh
+
+test_expect_success setup '
+
+       mkdir frotz &&
+       echo hello >frotz/filfre &&
+       git add frotz/filfre &&
+       test_tick &&
+       git commit -m "master has file frotz/filfre" &&
+
+       git branch side &&
+
+       echo goodbye >nitfol &&
+       git add nitfol
+       test_tick &&
+       git commit -m "master adds file nitfol" &&
+
+       git checkout side &&
+
+       git rm --cached frotz/filfre &&
+       mv frotz xyzzy &&
+       ln -s xyzzy frotz &&
+       git add xyzzy/filfre frotz &&
+       test_tick &&
+       git commit -m "side moves frotz/ to xyzzy/ and adds frotz->xyzzy/"
+
+'
+
+test_expect_success 'switch from symlink to dir' '
+
+       git checkout master
+
+'
+
+rm -fr frotz xyzzy nitfol &&
+git checkout -f master || exit
+
+test_expect_success 'switch from dir to symlink' '
+
+       git checkout side
+
+'
+
+test_done
index cac2411b9de7b4889abe6b0b84df25d24a38c7e5..89dd279f89c7648ec333c59634b3169251eec7ab 100644 (file)
@@ -495,6 +495,9 @@ static void verify_absent(const char *path, const char *action,
        if (o->index_only || o->reset || !o->update)
                return;
 
+       if (has_symlink_leading_path(path, NULL))
+               return;
+
        if (!lstat(path, &st)) {
                int cnt;