Merge branch 'maint'
authorJunio C Hamano <gitster@pobox.com>
Thu, 1 Jan 2009 13:48:35 +0000 (05:48 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 1 Jan 2009 13:48:35 +0000 (05:48 -0800)
* maint:
Documentation/git-tag.txt: minor typo and grammar fix

Documentation/Makefile
Documentation/RelNotes-1.6.2.txt [new file with mode: 0644]
Documentation/cat-texi.perl
Documentation/git-reset.txt
RelNotes
builtin-pack-objects.c
builtin-reset.c
t/t5302-pack-index.sh
index c34c1cae2072fa27de32f553866426bbc01436d5..5cd8b63ac553e13c1e3d779ea17dec0c5fb615cb 100644 (file)
@@ -187,17 +187,18 @@ git.info: user-manual.texi
 
 user-manual.texi: user-manual.xml
        $(RM) $@+ $@
-       $(DOCBOOK2X_TEXI) user-manual.xml --to-stdout | $(PERL_PATH) fix-texi.perl >$@+
+       $(DOCBOOK2X_TEXI) user-manual.xml --encoding=UTF-8 --to-stdout | \
+               $(PERL_PATH) fix-texi.perl >$@+
        mv $@+ $@
 
 gitman.texi: $(MAN_XML) cat-texi.perl
        $(RM) $@+ $@
-       ($(foreach xml,$(MAN_XML),$(DOCBOOK2X_TEXI) --to-stdout $(xml);)) | \
-       $(PERL_PATH) cat-texi.perl $@ >$@+
+       ($(foreach xml,$(MAN_XML),$(DOCBOOK2X_TEXI) --encoding=UTF-8 \
+               --to-stdout $(xml);)) | $(PERL_PATH) cat-texi.perl $@ >$@+
        mv $@+ $@
 
 gitman.info: gitman.texi
-       $(MAKEINFO) --no-split $*.texi
+       $(MAKEINFO) --no-split --no-validate $*.texi
 
 $(patsubst %.txt,%.texi,$(MAN_TXT)): %.texi : %.xml
        $(RM) $@+ $@
diff --git a/Documentation/RelNotes-1.6.2.txt b/Documentation/RelNotes-1.6.2.txt
new file mode 100644 (file)
index 0000000..1a80626
--- /dev/null
@@ -0,0 +1,28 @@
+GIT v1.6.2 Release Notes
+========================
+
+Updates since v1.6.1
+--------------------
+
+(subsystems)
+
+(portability)
+
+(performance)
+
+(usability, bells and whistles)
+
+(internal)
+
+
+Fixes since v1.6.1
+------------------
+
+All of the fixes in v1.6.1.X maintenance series are included in this
+release, unless otherwise noted.
+
+--
+exec >/var/tmp/1
+O=v1.6.1
+echo O=$(git describe master)
+git shortlog --no-merges $O..master ^maint
index dbc133cd3c1f19dd507014477e68b8ada78eab5e..828ec62554fe927eb16a03f835448e6db0c303a1 100755 (executable)
 
 printf '\input texinfo
 @setfilename gitman.info
-@documentencoding us-ascii
-@node Top,,%s
+@documentencoding UTF-8
+@dircategory Development
+@direntry
+* Git Man Pages: (gitman).  Manual pages for Git revision control system
+@end direntry
+@node Top,,, (dir)
 @top Git Manual Pages
 @documentlanguage en
 @menu
index 2049f3d97b67adc8fa93ca462875db6e522e1923..abb25d1c00c97144b1f3709e408fe9cad613e623 100644 (file)
@@ -8,7 +8,7 @@ git-reset - Reset current HEAD to the specified state
 SYNOPSIS
 --------
 [verse]
-'git reset' [--mixed | --soft | --hard] [-q] [<commit>]
+'git reset' [--mixed | --soft | --hard | --merge] [-q] [<commit>]
 'git reset' [-q] [<commit>] [--] <paths>...
 
 DESCRIPTION
@@ -45,6 +45,11 @@ OPTIONS
        switched to. Any changes to tracked files in the working tree
        since <commit> are lost.
 
+--merge::
+       Resets the index to match the tree recorded by the named commit,
+       and updates the files that are different between the named commit
+       and the current commit in the working tree.
+
 -q::
        Be quiet, only report errors.
 
@@ -152,6 +157,28 @@ tip of the current branch in ORIG_HEAD, so resetting hard to it
 brings your index file and the working tree back to that state,
 and resets the tip of the branch to that commit.
 
+Undo a merge or pull inside a dirty work tree::
++
+------------
+$ git pull                         <1>
+Auto-merging nitfol
+Merge made by recursive.
+ nitfol                |   20 +++++----
+ ...
+$ git reset --merge ORIG_HEAD      <2>
+------------
++
+<1> Even if you may have local modifications in your
+working tree, you can safely say "git pull" when you know
+that the change in the other branch does not overlap with
+them.
+<2> After inspecting the result of the merge, you may find
+that the change in the other branch is unsatisfactory.  Running
+"git reset --hard ORIG_HEAD" will let you go back to where you
+were, but it will discard your local changes, which you do not
+want.  "git reset --merge" keeps your local changes.
+
+
 Interrupted workflow::
 +
 Suppose you are interrupted by an urgent fix request while you
index 2ebf251ddf3c4091ad6b55aef86bfccbd1c612f2..ecced08731fe83882f94171b14ec18012a07621e 120000 (symlink)
--- a/RelNotes
+++ b/RelNotes
@@ -1 +1 @@
-Documentation/RelNotes-1.6.1.1.txt
\ No newline at end of file
+Documentation/RelNotes-1.6.2.txt
\ No newline at end of file
index cedef52fd3d62a3dd2e439a46579362b22c69642..e8515348be397fdf1d8201c5d957f2a5f2dbb334 100644 (file)
@@ -78,7 +78,7 @@ static int progress = 1;
 static int window = 10;
 static uint32_t pack_size_limit, pack_size_limit_cfg;
 static int depth = 50;
-static int delta_search_threads = 1;
+static int delta_search_threads;
 static int pack_to_stdout;
 static int num_preferred_base;
 static struct progress *progress_state;
@@ -1612,11 +1612,18 @@ static void ll_find_deltas(struct object_entry **list, unsigned list_size,
                find_deltas(list, &list_size, window, depth, processed);
                return;
        }
+       if (progress > pack_to_stdout)
+               fprintf(stderr, "Delta compression using %d threads.\n",
+                               delta_search_threads);
 
        /* Partition the work amongst work threads. */
        for (i = 0; i < delta_search_threads; i++) {
                unsigned sub_size = list_size / (delta_search_threads - i);
 
+               /* don't use too small segments or no deltas will be found */
+               if (sub_size < 2*window && i+1 < delta_search_threads)
+                       sub_size = 0;
+
                p[i].window = window;
                p[i].depth = depth;
                p[i].processed = processed;
index 9514b77f8c0b4e8a576e888df905b501e198df24..c0cb915c26b56a905807cefa4e246d99d199b297 100644 (file)
 #include "parse-options.h"
 
 static const char * const git_reset_usage[] = {
-       "git reset [--mixed | --soft | --hard] [-q] [<commit>]",
+       "git reset [--mixed | --soft | --hard | --merge] [-q] [<commit>]",
        "git reset [--mixed] <commit> [--] <paths>...",
        NULL
 };
 
+enum reset_type { MIXED, SOFT, HARD, MERGE, NONE };
+static const char *reset_type_names[] = { "mixed", "soft", "hard", "merge", NULL };
+
 static char *args_to_str(const char **argv)
 {
        char *buf = NULL;
@@ -49,7 +52,7 @@ static inline int is_merge(void)
        return !access(git_path("MERGE_HEAD"), F_OK);
 }
 
-static int reset_index_file(const unsigned char *sha1, int is_hard_reset, int quiet)
+static int reset_index_file(const unsigned char *sha1, int reset_type, int quiet)
 {
        int i = 0;
        const char *args[6];
@@ -57,9 +60,17 @@ static int reset_index_file(const unsigned char *sha1, int is_hard_reset, int qu
        args[i++] = "read-tree";
        if (!quiet)
                args[i++] = "-v";
-       args[i++] = "--reset";
-       if (is_hard_reset)
+       switch (reset_type) {
+       case MERGE:
                args[i++] = "-u";
+               args[i++] = "-m";
+               break;
+       case HARD:
+               args[i++] = "-u";
+               /* fallthrough */
+       default:
+               args[i++] = "--reset";
+       }
        args[i++] = sha1_to_hex(sha1);
        args[i] = NULL;
 
@@ -169,9 +180,6 @@ static void prepend_reflog_action(const char *action, char *buf, size_t size)
                warning("Reflog action message too long: %.*s...", 50, buf);
 }
 
-enum reset_type { MIXED, SOFT, HARD, NONE };
-static const char *reset_type_names[] = { "mixed", "soft", "hard", NULL };
-
 int cmd_reset(int argc, const char **argv, const char *prefix)
 {
        int i = 0, reset_type = NONE, update_ref_status = 0, quiet = 0;
@@ -186,6 +194,8 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
                OPT_SET_INT(0, "soft", &reset_type, "reset only HEAD", SOFT),
                OPT_SET_INT(0, "hard", &reset_type,
                                "reset HEAD, index and working tree", HARD),
+               OPT_SET_INT(0, "merge", &reset_type,
+                               "reset HEAD, index and working tree", MERGE),
                OPT_BOOLEAN('q', NULL, &quiet,
                                "disable showing new HEAD in hard reset and progress message"),
                OPT_END()
@@ -266,7 +276,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
                if (is_merge() || read_cache() < 0 || unmerged_cache())
                        die("Cannot do a soft reset in the middle of a merge.");
        }
-       else if (reset_index_file(sha1, (reset_type == HARD), quiet))
+       else if (reset_index_file(sha1, reset_type, quiet))
                die("Could not reset index file to revision '%s'.", rev);
 
        /* Any resets update HEAD to the head being switched to,
index 884e24253a0a9d262b39ae96ea5c03ecb7ba4072..e6f70d474f2f855d3b2b40eed526e4873b3288d5 100755 (executable)
@@ -10,6 +10,7 @@ test_expect_success \
     'setup' \
     'rm -rf .git
      git init &&
+     git config pack.threads 1 &&
      i=1 &&
      while test $i -le 100
      do