Merge branch 'maint'
authorJunio C Hamano <junkio@cox.net>
Tue, 5 Dec 2006 00:30:00 +0000 (16:30 -0800)
committerJunio C Hamano <junkio@cox.net>
Tue, 5 Dec 2006 00:30:00 +0000 (16:30 -0800)
* maint:
receive-pack: do not insist on fast-forward outside refs/heads/
git-mv: search more precisely for source directory in index

Conflicts:

receive-pack.c

builtin-mv.c
receive-pack.c
t/t7001-mv.sh
index 54dd3bfe8ac787fda32f3557faac00c65a61de96..d14a4a7f5c66c5f8712399d4b1fc566e0891125a 100644 (file)
@@ -146,21 +146,24 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
                                && lstat(dst, &st) == 0)
                        bad = "cannot move directory over file";
                else if (src_is_dir) {
+                       const char *src_w_slash = add_slash(src);
+                       int len_w_slash = length + 1;
                        int first, last;
 
                        modes[i] = WORKING_DIRECTORY;
 
-                       first = cache_name_pos(src, length);
+                       first = cache_name_pos(src_w_slash, len_w_slash);
                        if (first >= 0)
-                               die ("Huh? %s/ is in index?", src);
+                               die ("Huh? %.*s is in index?",
+                                               len_w_slash, src_w_slash);
 
                        first = -1 - first;
                        for (last = first; last < active_nr; last++) {
                                const char *path = active_cache[last]->name;
-                               if (strncmp(path, src, length)
-                                               || path[length] != '/')
+                               if (strncmp(path, src_w_slash, len_w_slash))
                                        break;
                        }
+                       free((char *)src_w_slash);
 
                        if (last - first < 1)
                                bad = "source directory is empty";
index 1a141dc1e55aef221312b4cde590fac865546c43..a20bc924d6b261138002f2e95b127e0ffd226411 100644 (file)
@@ -120,7 +120,8 @@ static int update(struct command *cmd)
                             "but I can't find it!", new_hex);
        }
        if (deny_non_fast_forwards && !is_null_sha1(new_sha1) &&
-           !is_null_sha1(old_sha1)) {
+           !is_null_sha1(old_sha1) &&
+           !strncmp(name, "refs/heads/", 11)) {
                struct commit *old_commit, *new_commit;
                struct commit_list *bases, *ent;
 
index 23a1eff3bba4505d449bd5fdffb3daf7f9b23ddf..2f4ff82e149c497d79583f6b431b29d597e4a1ae 100755 (executable)
@@ -105,4 +105,17 @@ test_expect_success "Michael Cassar's test case" '
        }
 '
 
+rm -fr papers partA path?
+
+test_expect_success "Sergey Vlasov's test case" '
+       rm -fr .git &&
+       git init-db &&
+       mkdir ab &&
+       date >ab.c &&
+       date >ab/d &&
+       git add ab.c ab &&
+       git commit -m 'initial' &&
+       git mv ab a
+'
+
 test_done