Merge branch 'jc/maint-limit-note-output' into maint
authorJunio C Hamano <gitster@pobox.com>
Fri, 5 Feb 2010 18:59:05 +0000 (10:59 -0800)
committerJunio C Hamano <gitster@pobox.com>
Fri, 5 Feb 2010 18:59:05 +0000 (10:59 -0800)
* jc/maint-limit-note-output:
Fix "log --oneline" not to show notes
Fix "log" family not to be too agressive about showing notes

12 files changed:
builtin-commit.c
commit.c
contrib/completion/git-completion.bash
git-gui/Makefile
git-gui/git-gui.sh
git-gui/lib/choose_repository.tcl
git-gui/lib/diff.tcl
git-gui/lib/index.tcl
merge-recursive.c
path.c
remote-curl.c
t/t1501-worktree.sh
index 33aa593c21b70cd29a54e7b8151d78e092cfad3a..83b7c353ed6e4ca99a9bfae041c41280d31122a7 100644 (file)
@@ -278,11 +278,13 @@ static char *prepare_index(int argc, const char **argv, const char *prefix, int
         * We still need to refresh the index here.
         */
        if (!pathspec || !*pathspec) {
-               fd = hold_locked_index(&index_lock, 1);
+               fd = hold_locked_index(&index_lock, !is_status);
                refresh_cache(refresh_flags);
-               if (write_cache(fd, active_cache, active_nr) ||
-                   commit_locked_index(&index_lock))
-                       die("unable to write new_index file");
+               if (0 <= fd) {
+                       if (write_cache(fd, active_cache, active_nr) ||
+                           commit_locked_index(&index_lock))
+                               die("unable to write new_index file");
+               }
                commit_style = COMMIT_AS_IS;
                return get_index_file();
        }
index 632061c2c3669991b6526a5b6b452e3b54ee718c..731191e63bd39a89a8ea4ed0390c49d5605cdbed 100644 (file)
--- a/commit.c
+++ b/commit.c
@@ -224,7 +224,7 @@ int unregister_shallow(const unsigned char *sha1)
        if (pos < 0)
                return -1;
        if (pos + 1 < commit_graft_nr)
-               memcpy(commit_graft + pos, commit_graft + pos + 1,
+               memmove(commit_graft + pos, commit_graft + pos + 1,
                                sizeof(struct commit_graft *)
                                * (commit_graft_nr - pos - 1));
        commit_graft_nr--;
index 1a9943c012d2efc47132e09d383332cb5efaead2..1a762e88e7fcf3b36b3acdffa3e8ec18e3644e2e 100755 (executable)
@@ -571,6 +571,7 @@ __git_list_porcelain_commands ()
                read-tree)        : plumbing;;
                receive-pack)     : plumbing;;
                reflog)           : plumbing;;
+               remote-*)         : transport;;
                repo-config)      : deprecated;;
                rerere)           : plumbing;;
                rev-list)         : plumbing;;
index b3580e9e48b6ac5d1a7fbd010f032445702f140f..197b55edf3eeeaec345d88227825cc550e6de72d 100644 (file)
@@ -7,7 +7,7 @@ all::
 # TCL_PATH must be vaild for this to work.
 #
 
-GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
+GIT-VERSION-FILE: FORCE
        @$(SHELL_PATH) ./GIT-VERSION-GEN
 -include GIT-VERSION-FILE
 
@@ -270,7 +270,7 @@ TRACK_VARS = \
        GITGUI_MACOSXAPP=$(GITGUI_MACOSXAPP) \
 #end TRACK_VARS
 
-GIT-GUI-VARS: .FORCE-GIT-GUI-VARS
+GIT-GUI-VARS: FORCE
        @VARS='$(TRACK_VARS)'; \
        if test x"$$VARS" != x"`cat $@ 2>/dev/null`" ; then \
                echo 1>&2 "    * new locations or Tcl/Tk interpreter"; \
@@ -340,5 +340,4 @@ ifdef GITGUI_WINDOWS_WRAPPER
 endif
 
 .PHONY: all install uninstall dist-version clean
-.PHONY: .FORCE-GIT-VERSION-FILE
-.PHONY: .FORCE-GIT-GUI-VARS
+.PHONY: FORCE
index 718277a651f1fbc8e100e7eb657d87699b1059cb..1fb3cbfc78fe07e658aa299f46fd8f55dbab1378 100755 (executable)
@@ -1074,6 +1074,8 @@ if {[catch {
                set _prefix {}
                }]
        && [catch {
+               # beware that from the .git dir this sets _gitdir to .
+               # and _prefix to the empty string
                set _gitdir [git rev-parse --git-dir]
                set _prefix [git rev-parse --show-prefix]
        } err]} {
@@ -1082,6 +1084,14 @@ if {[catch {
        choose_repository::pick
        set picked 1
 }
+
+# we expand the _gitdir when it's just a single dot (i.e. when we're being
+# run from the .git dir itself) lest the routines to find the worktree
+# get confused
+if {$_gitdir eq "."} {
+       set _gitdir [pwd]
+}
+
 if {![file isdirectory $_gitdir] && [is_Cygwin]} {
        catch {set _gitdir [exec cygpath --windows $_gitdir]}
 }
@@ -1613,6 +1623,9 @@ proc merge_state {path new_state {head_info {}} {index_info {}}} {
        } elseif {$s0 ne {_} && [string index $state 0] eq {_}
                && $head_info eq {}} {
                set head_info $index_info
+       } elseif {$s0 eq {_} && [string index $state 0] ne {_}} {
+               set index_info $head_info
+               set head_info {}
        }
 
        set file_states($path) [list $s0$s1 $icon \
@@ -1941,7 +1954,7 @@ proc do_gitk {revs} {
                cd [file dirname [gitdir]]
                set env(GIT_DIR) [file tail [gitdir]]
 
-               eval exec $cmd $revs &
+               eval exec $cmd $revs "--" "--" &
 
                if {$old_GIT_DIR eq {}} {
                        unset env(GIT_DIR)
@@ -2543,12 +2556,14 @@ if {[is_enabled multicommit] || [is_enabled singlecommit]} {
                [list .mbar.commit entryconf [.mbar.commit index last] -state]
 
        .mbar.commit add command -label [mc "Unstage From Commit"] \
-               -command do_unstage_selection
+               -command do_unstage_selection \
+               -accelerator $M1T-U
        lappend disable_on_lock \
                [list .mbar.commit entryconf [.mbar.commit index last] -state]
 
        .mbar.commit add command -label [mc "Revert Changes"] \
-               -command do_revert_selection
+               -command do_revert_selection \
+               -accelerator $M1T-J
        lappend disable_on_lock \
                [list .mbar.commit entryconf [.mbar.commit index last] -state]
 
@@ -3296,6 +3311,10 @@ unset gws
 bind $ui_comm <$M1B-Key-Return> {do_commit;break}
 bind $ui_comm <$M1B-Key-t> {do_add_selection;break}
 bind $ui_comm <$M1B-Key-T> {do_add_selection;break}
+bind $ui_comm <$M1B-Key-u> {do_unstage_selection;break}
+bind $ui_comm <$M1B-Key-U> {do_unstage_selection;break}
+bind $ui_comm <$M1B-Key-j> {do_revert_selection;break}
+bind $ui_comm <$M1B-Key-J> {do_revert_selection;break}
 bind $ui_comm <$M1B-Key-i> {do_add_all;break}
 bind $ui_comm <$M1B-Key-I> {do_add_all;break}
 bind $ui_comm <$M1B-Key-x> {tk_textCut %W;break}
index 633cc572bbd076ff957c0b8194b6645e899e53ad..3f8f3030fadf4f438dd04b41ed75cfda1478f2de 100644 (file)
@@ -235,6 +235,8 @@ proc _get_recentrepos {} {
        foreach p [get_config gui.recentrepo] {
                if {[_is_git [file join $p .git]]} {
                        lappend recent $p
+               } else {
+                       _unset_recentrepo $p
                }
        }
        return [lsort $recent]
@@ -243,6 +245,7 @@ proc _get_recentrepos {} {
 proc _unset_recentrepo {p} {
        regsub -all -- {([()\[\]{}\.^$+*?\\])} $p {\\\1} p
        git config --global --unset gui.recentrepo "^$p\$"
+       load_config 1
 }
 
 proc _append_recentrepos {path} {
@@ -261,6 +264,7 @@ proc _append_recentrepos {path} {
 
        lappend recent $path
        git config --global --add gui.recentrepo $path
+       load_config 1
 
        while {[llength $recent] > 10} {
                _unset_recentrepo [lindex $recent 0]
index bd5d189ed1ec1a6520b7e9fefc4d5d6f36b9a007..066755b864b587e073a820aa2eb729a6c930d7b0 100644 (file)
@@ -664,6 +664,7 @@ proc apply_line {x y} {
                }
                set i_l $next_l
        }
+       set patch "$patch$pre_context"
        set patch "@@ -$hln,$n +$hln,[eval expr $n $sign 1] @@\n$patch"
 
        if {[catch {
index d33896a0ce26dd34c8024e21c71123e62832b8c0..0b58bd88768d38782131bfc7916f652a606e6403 100644 (file)
@@ -14,29 +14,31 @@ proc _close_updateindex {fd after} {
                toplevel $w
                wm title $w [strcat "[appname] ([reponame]): " [mc "Index Error"]]
                wm geometry $w "+[winfo rootx .]+[winfo rooty .]"
-               pack [label $w.msg \
-                       -justify left \
-                       -anchor w \
-                       -text [strcat \
-                               [mc "Updating the Git index failed.  A rescan will be automatically started to resynchronize git-gui."] \
-                               "\n\n$err"] \
-                       ] -anchor w
-
-               frame $w.buttons
-               button $w.buttons.continue \
+               set s [mc "Updating the Git index failed.  A rescan will be automatically started to resynchronize git-gui."]
+               text $w.msg -yscrollcommand [list $w.vs set] \
+                       -width [string length $s] -relief flat \
+                       -borderwidth 0 -highlightthickness 0 \
+                       -background [$w cget -background]
+               $w.msg tag configure bold -font font_uibold -justify center
+               scrollbar $w.vs -command [list $w.msg yview]
+               $w.msg insert end $s bold \n\n$err {}
+               $w.msg configure -state disabled
+
+               button $w.continue \
                        -text [mc "Continue"] \
                        -command [list destroy $w]
-               pack $w.buttons.continue -side right -padx 5
-               button $w.buttons.unlock \
+               button $w.unlock \
                        -text [mc "Unlock Index"] \
                        -command "destroy $w; _delete_indexlock"
-               pack $w.buttons.unlock -side right
-               pack $w.buttons -side bottom -fill x -pady 10 -padx 10
+               grid $w.msg - $w.vs -sticky news
+               grid $w.unlock $w.continue - -sticky se -padx 2 -pady 2
+               grid columnconfigure $w 0 -weight 1
+               grid rowconfigure $w 0 -weight 1
 
                wm protocol $w WM_DELETE_WINDOW update
-               bind $w.buttons.continue <Visibility> "
+               bind $w.continue <Visibility> "
                        grab $w
-                       focus $w.buttons.continue
+                       focus %W
                "
                tkwait window $w
 
index dd4fbd0e6bc22f2e5f5667205b47165f8aebbbd0..22a31ed5ff5d1affd54da43769a3982ba2ec1b75 100644 (file)
@@ -200,14 +200,14 @@ struct tree *write_tree_from_memory(struct merge_options *o)
 
        if (unmerged_cache()) {
                int i;
-               output(o, 0, "There are unmerged index entries:");
+               fprintf(stderr, "BUG: There are unmerged index entries:\n");
                for (i = 0; i < active_nr; i++) {
                        struct cache_entry *ce = active_cache[i];
                        if (ce_stage(ce))
-                               output(o, 0, "%d %.*s", ce_stage(ce),
-                                      (int)ce_namelen(ce), ce->name);
+                               fprintf(stderr, "BUG: %d %.*s", ce_stage(ce),
+                                       (int)ce_namelen(ce), ce->name);
                }
-               return NULL;
+               die("Bug in merge-recursive.c");
        }
 
        if (!active_cache_tree)
diff --git a/path.c b/path.c
index 2ec950b27f1c3e4919ce7d1696360c5a49abb724..79aa104712364a8c18964feecd4c8079449a78cf 100644 (file)
--- a/path.c
+++ b/path.c
@@ -394,17 +394,38 @@ int set_shared_perm(const char *path, int mode)
 const char *make_relative_path(const char *abs, const char *base)
 {
        static char buf[PATH_MAX + 1];
-       int baselen;
-       if (!base)
-               return abs;
-       baselen = strlen(base);
-       if (prefixcmp(abs, base))
+       int i = 0, j = 0;
+
+       if (!base || !base[0])
                return abs;
-       if (abs[baselen] == '/')
-               baselen++;
-       else if (base[baselen - 1] != '/')
+       while (base[i]) {
+               if (is_dir_sep(base[i])) {
+                       if (!is_dir_sep(abs[j]))
+                               return abs;
+                       while (is_dir_sep(base[i]))
+                               i++;
+                       while (is_dir_sep(abs[j]))
+                               j++;
+                       continue;
+               } else if (abs[j] != base[i]) {
+                       return abs;
+               }
+               i++;
+               j++;
+       }
+       if (
+           /* "/foo" is a prefix of "/foo" */
+           abs[j] &&
+           /* "/foo" is not a prefix of "/foobar" */
+           !is_dir_sep(base[i-1]) && !is_dir_sep(abs[j])
+          )
                return abs;
-       strcpy(buf, abs + baselen);
+       while (is_dir_sep(abs[j]))
+               j++;
+       if (!abs[j])
+               strcpy(buf, ".");
+       else
+               strcpy(buf, abs + j);
        return buf;
 }
 
index 8f169ddca0fd465b332a6044e0a05a628fa7b825..3edbf5717c94f3123a97939acf265cc8334ca899 100644 (file)
@@ -102,7 +102,7 @@ static struct discovery* discover_refs(const char *service)
        struct strbuf buffer = STRBUF_INIT;
        struct discovery *last = last_discovery;
        char *refs_url;
-       int http_ret, is_http = 0;
+       int http_ret, is_http = 0, proto_git_candidate = 1;
 
        if (last && !strcmp(service, last->service))
                return last;
@@ -121,6 +121,19 @@ static struct discovery* discover_refs(const char *service)
 
        init_walker();
        http_ret = http_get_strbuf(refs_url, &buffer, HTTP_NO_CACHE);
+
+       /* try again with "plain" url (no ? or & appended) */
+       if (http_ret != HTTP_OK) {
+               free(refs_url);
+               strbuf_reset(&buffer);
+
+               proto_git_candidate = 0;
+               strbuf_addf(&buffer, "%s/info/refs", url);
+               refs_url = strbuf_detach(&buffer, NULL);
+
+               http_ret = http_get_strbuf(refs_url, &buffer, HTTP_NO_CACHE);
+       }
+
        switch (http_ret) {
        case HTTP_OK:
                break;
@@ -137,7 +150,8 @@ static struct discovery* discover_refs(const char *service)
        last->buf_alloc = strbuf_detach(&buffer, &last->len);
        last->buf = last->buf_alloc;
 
-       if (is_http && 5 <= last->len && last->buf[4] == '#') {
+       if (is_http && proto_git_candidate
+               && 5 <= last->len && last->buf[4] == '#') {
                /* smart HTTP response; validate that the service
                 * pkt-line matches our request.
                 */
index 74e6443664010196f2694304179917fdadc53c01..9df301211c7f03e4a9edb0ccb9b1a7a648f97d8c 100755 (executable)
@@ -189,4 +189,10 @@ test_expect_success 'absolute pathspec should fail gracefully' '
        )
 '
 
+test_expect_success 'make_relative_path handles double slashes in GIT_DIR' '
+       : > dummy_file
+       echo git --git-dir="$(pwd)//repo.git" --work-tree="$(pwd)" add dummy_file &&
+       git --git-dir="$(pwd)//repo.git" --work-tree="$(pwd)" add dummy_file
+'
+
 test_done