From 6dd14366d9478fdb3b459e1b39e384deb5f38f9f Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Tue, 25 Sep 2007 08:44:38 -0400 Subject: [PATCH 01/14] user-manual: Explain what submodules are good for. Rework the introduction to the Submodules section to explain why someone would use them, and fix up submodule references from the tree-object and todo sections. Signed-off-by: Michael Smith Acked-by: J. Bruce Fields Signed-off-by: Junio C Hamano --- Documentation/user-manual.txt | 52 +++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/Documentation/user-manual.txt b/Documentation/user-manual.txt index a085ca1d39..c7fdf25e27 100644 --- a/Documentation/user-manual.txt +++ b/Documentation/user-manual.txt @@ -2856,8 +2856,7 @@ between two related tree objects, since it can ignore any entries with identical object names. (Note: in the presence of submodules, trees may also have commits as -entries. See gitlink:git-submodule[1] and gitlink:gitmodules.txt[1] -for partial documentation.) +entries. See <> for documentation.) Note that the files all have mode 644 or 755: git actually only pays attention to the executable bit. @@ -3163,12 +3162,45 @@ information as long as you have the name of the tree that it described. Submodules ========== -This tutorial explains how to create and publish a repository with submodules -using the gitlink:git-submodule[1] command. +Large projects are often composed of smaller, self-contained modules. For +example, an embedded Linux distribution's source tree would include every +piece of software in the distribution with some local modifications; a movie +player might need to build against a specific, known-working version of a +decompression library; several independent programs might all share the same +build scripts. -Submodules maintain their own identity; the submodule support just stores the -submodule repository location and commit ID, so other developers who clone the -superproject can easily clone all the submodules at the same revision. +With centralized revision control systems this is often accomplished by +including every module in one single repository. Developers can check out +all modules or only the modules they need to work with. They can even modify +files across several modules in a single commit while moving things around +or updating APIs and translations. + +Git does not allow partial checkouts, so duplicating this approach in Git +would force developers to keep a local copy of modules they are not +interested in touching. Commits in an enormous checkout would be slower +than you'd expect as Git would have to scan every directory for changes. +If modules have a lot of local history, clones would take forever. + +On the plus side, distributed revision control systems can much better +integrate with external sources. In a centralized model, a single arbitrary +snapshot of the external project is exported from its own revision control +and then imported into the local revision control on a vendor branch. All +the history is hidden. With distributed revision control you can clone the +entire external history and much more easily follow development and re-merge +local changes. + +Git's submodule support allows a repository to contain, as a subdirectory, a +checkout of an external project. Submodules maintain their own identity; +the submodule support just stores the submodule repository location and +commit ID, so other developers who clone the containing project +("superproject") can easily clone all the submodules at the same revision. +Partial checkouts of the superproject are possible: you can tell Git to +clone none, some or all of the submodules. + +The gitlink:git-submodule[1] command is available since Git 1.5.3. Users +with Git 1.5.2 can look up the submodule commits in the repository and +manually check them out; earlier versions won't recognize the submodules at +all. To see how submodule support works, create (for example) four example repositories that can be used later as a submodule: @@ -3213,8 +3245,8 @@ The `git submodule add` command does a couple of things: - It clones the submodule under the current directory and by default checks out the master branch. -- It adds the submodule's clone path to the `.gitmodules` file and adds this - file to the index, ready to be committed. +- It adds the submodule's clone path to the gitlink:gitmodules[5] file and + adds this file to the index, ready to be committed. - It adds the submodule's current commit ID to the index, ready to be committed. @@ -4277,5 +4309,3 @@ Write a chapter on using plumbing and writing scripts. Alternates, clone -reference, etc. git unpack-objects -r for recovery - -submodules From 2dbbc45730cd85e311a1bff38a07148a423a4f1e Mon Sep 17 00:00:00 2001 From: Johannes Sixt Date: Tue, 25 Sep 2007 15:05:28 +0200 Subject: [PATCH 02/14] gitattributes.txt: Remove a duplicated paragraph about 'ident' and 'crlf' interaction. The order in which 'ident' and 'crlf' are carried out is documented a few paragraphs later again, after 'filter' was introduced. Signed-off-by: Johannes Sixt Signed-off-by: Junio C Hamano --- Documentation/gitattributes.txt | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt index 46f9d591aa..676f694f82 100644 --- a/Documentation/gitattributes.txt +++ b/Documentation/gitattributes.txt @@ -145,17 +145,6 @@ sign `$` upon checkout. Any byte sequence that begins with with `$Id$` upon check-in. -Interaction between checkin/checkout attributes -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -In the check-in codepath, the worktree file is first converted -with `ident` (if specified), and then with `crlf` (again, if -specified and applicable). - -In the check-out codepath, the blob content is first converted -with `crlf`, and then `ident`. - - `filter` ^^^^^^^^ From 4d84aff356d9c6d86a8d621ee577283ed70e145e Mon Sep 17 00:00:00 2001 From: Johannes Sixt Date: Tue, 25 Sep 2007 15:05:29 +0200 Subject: [PATCH 03/14] gitattributes.txt: Be more to the point in the filter driver description. The description was meant to emphasizes that the project should remain usable even if the filter driver was not used. This makes it more explicit and removes the "here is rope to hang yourself" paraphrase. Signed-off-by: Johannes Sixt Signed-off-by: Junio C Hamano --- Documentation/gitattributes.txt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt index 676f694f82..dd51aa11ea 100644 --- a/Documentation/gitattributes.txt +++ b/Documentation/gitattributes.txt @@ -164,11 +164,10 @@ but makes the filter a no-op passthru. The content filtering is done to massage the content into a shape that is more convenient for the platform, filesystem, and the user to use. The keyword here is "more convenient" and not -"turning something unusable into usable". In other words, it is -"hanging yourself because we gave you a long rope" if your -project uses filtering mechanism in such a way that it makes -your project unusable unless the checkout is done with a -specific filter in effect. +"turning something unusable into usable". In other words, the +intent is that if someone unsets the filter driver definition, +or does not have the appropriate filter program, the project +should still be usable. Interaction between checkin/checkout attributes From b06743925c3022ffbbd459431531709df13bbf38 Mon Sep 17 00:00:00 2001 From: Shawn Bohrer Date: Tue, 25 Sep 2007 23:12:46 -0500 Subject: [PATCH 04/14] Fix spelling of overridden in documentation Signed-off-by: Shawn Bohrer Signed-off-by: Junio C Hamano --- Documentation/git-merge.txt | 2 +- Documentation/gitignore.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/git-merge.txt b/Documentation/git-merge.txt index 144bc16ff2..eae49c4876 100644 --- a/Documentation/git-merge.txt +++ b/Documentation/git-merge.txt @@ -56,7 +56,7 @@ merge.verbosity:: message if conflicts were detected. Level 1 outputs only conflicts, 2 outputs conflicts and file changes. Level 5 and above outputs debugging information. The default is level 2. - Can be overriden by 'GIT_MERGE_VERBOSITY' environment variable. + Can be overridden by 'GIT_MERGE_VERBOSITY' environment variable. HOW MERGE WORKS diff --git a/Documentation/gitignore.txt b/Documentation/gitignore.txt index 9c83095693..e8b8581f52 100644 --- a/Documentation/gitignore.txt +++ b/Documentation/gitignore.txt @@ -26,7 +26,7 @@ precedence, the last matching pattern decides the outcome): * Patterns read from a `.gitignore` file in the same directory as the path, or in any parent directory, with patterns in the - higher level files (up to the root) being overriden by those in + higher level files (up to the root) being overridden by those in lower level files down to the directory containing the file. These patterns match relative to the location of the `.gitignore` file. A project normally includes such From bce92405aebf217a4738bab0df89516910818e68 Mon Sep 17 00:00:00 2001 From: Randy Dunlap Date: Tue, 25 Sep 2007 22:02:28 -0700 Subject: [PATCH 05/14] core-tutorial: correct URL The tinyurl is incorrect -- it attempts to go to groups.osdl.org, which is gone. Either use the full URL (in patch) or create a new tinyurl for this URL. Is the web page (where I first saw this problem) generated from this txt file? http://www.kernel.org/pub/software/scm/git/docs/core-tutorial.html If not, it needs to be updated also. Signed-off-by: Randy Dunlap Signed-off-by: Junio C Hamano --- Documentation/core-tutorial.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Documentation/core-tutorial.txt b/Documentation/core-tutorial.txt index 4b4fd9a506..6b2590d072 100644 --- a/Documentation/core-tutorial.txt +++ b/Documentation/core-tutorial.txt @@ -1459,7 +1459,8 @@ Although git is a truly distributed system, it is often convenient to organize your project with an informal hierarchy of developers. Linux kernel development is run this way. There is a nice illustration (page 17, "Merges to Mainline") in -link:http://tinyurl.com/a2jdg[Randy Dunlap's presentation]. +link:http://www.xenotime.net/linux/mentor/linux-mentoring-2006.pdf +[Randy Dunlap's presentation]. It should be stressed that this hierarchy is purely *informal*. There is nothing fundamental in git that enforces the "chain of From 102c2338da0b0954a04742f5cbe307fa6b49f225 Mon Sep 17 00:00:00 2001 From: Carlos Rica Date: Tue, 11 Sep 2007 05:17:28 +0200 Subject: [PATCH 06/14] Move make_cache_entry() from merge-recursive.c into read-cache.c The function make_cache_entry() is too useful to be hidden away in merge-recursive. So move it to libgit.a (exposing it via cache.h). Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- cache.h | 1 + merge-recursive.c | 24 ------------------------ read-cache.c | 25 +++++++++++++++++++++++++ 3 files changed, 26 insertions(+), 24 deletions(-) diff --git a/cache.h b/cache.h index 70abbd59bf..fc195bc47c 100644 --- a/cache.h +++ b/cache.h @@ -264,6 +264,7 @@ extern struct cache_entry *refresh_cache_entry(struct cache_entry *ce, int reall extern int remove_index_entry_at(struct index_state *, int pos); extern int remove_file_from_index(struct index_state *, const char *path); extern int add_file_to_index(struct index_state *, const char *path, int verbose); +extern struct cache_entry *make_cache_entry(unsigned int mode, const unsigned char *sha1, const char *path, int stage, int refresh); extern int ce_same_name(struct cache_entry *a, struct cache_entry *b); extern int ie_match_stat(struct index_state *, struct cache_entry *, struct stat *, int); extern int ie_modified(struct index_state *, struct cache_entry *, struct stat *, int); diff --git a/merge-recursive.c b/merge-recursive.c index 16f6a0f98b..19d5f3b287 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -171,30 +171,6 @@ static void output_commit_title(struct commit *commit) } } -static struct cache_entry *make_cache_entry(unsigned int mode, - const unsigned char *sha1, const char *path, int stage, int refresh) -{ - int size, len; - struct cache_entry *ce; - - if (!verify_path(path)) - return NULL; - - len = strlen(path); - size = cache_entry_size(len); - ce = xcalloc(1, size); - - hashcpy(ce->sha1, sha1); - memcpy(ce->name, path, len); - ce->ce_flags = create_ce_flags(len, stage); - ce->ce_mode = create_ce_mode(mode); - - if (refresh) - return refresh_cache_entry(ce, 0); - - return ce; -} - static int add_cacheinfo(unsigned int mode, const unsigned char *sha1, const char *path, int stage, int refresh, int options) { diff --git a/read-cache.c b/read-cache.c index 8b1c94e0e3..536f4d0875 100644 --- a/read-cache.c +++ b/read-cache.c @@ -434,6 +434,31 @@ int add_file_to_index(struct index_state *istate, const char *path, int verbose) return 0; } +struct cache_entry *make_cache_entry(unsigned int mode, + const unsigned char *sha1, const char *path, int stage, + int refresh) +{ + int size, len; + struct cache_entry *ce; + + if (!verify_path(path)) + return NULL; + + len = strlen(path); + size = cache_entry_size(len); + ce = xcalloc(1, size); + + hashcpy(ce->sha1, sha1); + memcpy(ce->name, path, len); + ce->ce_flags = create_ce_flags(len, stage); + ce->ce_mode = create_ce_mode(mode); + + if (refresh) + return refresh_cache_entry(ce, 0); + + return ce; +} + int ce_same_name(struct cache_entry *a, struct cache_entry *b) { int len = ce_namelen(a); From 26b28007689d27a921ea90e5a29fc8eb74b0d297 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Mon, 17 Sep 2007 23:34:06 +0100 Subject: [PATCH 07/14] apply: get rid of --index-info in favor of --build-fake-ancestor git-am used "git apply -z --index-info" to find the original versions of the files touched by the diff, to be able to do an inexpensive three-way merge. This operation makes only sense in a repository, since the index information in the diff refers to blobs, which have to be present in the current repository. Therefore, teach "git apply" a mode to write out the result as an index file to begin with, obviating the need for scripts to do it themselves. The sole user for --index-info is "git am" is converted to use --build-fake-ancestor in this patch. Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- Documentation/git-apply.txt | 11 +++++++---- builtin-apply.c | 35 ++++++++++++++++++++++------------- git-am.sh | 6 ++---- 3 files changed, 31 insertions(+), 21 deletions(-) diff --git a/Documentation/git-apply.txt b/Documentation/git-apply.txt index 4c7e3a2f7f..c1c54bfe0b 100644 --- a/Documentation/git-apply.txt +++ b/Documentation/git-apply.txt @@ -10,7 +10,7 @@ SYNOPSIS -------- [verse] 'git-apply' [--stat] [--numstat] [--summary] [--check] [--index] - [--apply] [--no-add] [--index-info] [-R | --reverse] + [--apply] [--no-add] [--build-fake-ancestor ] [-R | --reverse] [--allow-binary-replacement | --binary] [--reject] [-z] [-pNUM] [-CNUM] [--inaccurate-eof] [--cached] [--whitespace=] @@ -63,12 +63,15 @@ OPTIONS cached data, apply the patch, and store the result in the index, without using the working tree. This implies '--index'. ---index-info:: +--build-fake-ancestor :: Newer git-diff output has embedded 'index information' for each blob to help identify the original version that the patch applies to. When this flag is given, and if - the original version of the blob is available locally, - outputs information about them to the standard output. + the original versions of the blobs is available locally, + builds a temporary index containing those blobs. ++ +When a pure mode change is encountered (which has no index information), +the information is read from the current index instead. -R, --reverse:: Apply the patch in reverse. diff --git a/builtin-apply.c b/builtin-apply.c index bd969778e0..5cc90e68f8 100644 --- a/builtin-apply.c +++ b/builtin-apply.c @@ -41,7 +41,7 @@ static int apply_in_reverse; static int apply_with_reject; static int apply_verbosely; static int no_add; -static int show_index_info; +static const char *fake_ancestor; static int line_termination = '\n'; static unsigned long p_context = ULONG_MAX; static const char apply_usage[] = @@ -2248,9 +2248,12 @@ static int get_current_sha1(const char *path, unsigned char *sha1) return 0; } -static void show_index_list(struct patch *list) +/* Build an index that contains the just the files needed for a 3way merge */ +static void build_fake_ancestor(struct patch *list, const char *filename) { struct patch *patch; + struct index_state result = { 0 }; + int fd; /* Once we start supporting the reverse patch, it may be * worth showing the new sha1 prefix, but until then... @@ -2258,11 +2261,12 @@ static void show_index_list(struct patch *list) for (patch = list; patch; patch = patch->next) { const unsigned char *sha1_ptr; unsigned char sha1[20]; + struct cache_entry *ce; const char *name; name = patch->old_name ? patch->old_name : patch->new_name; if (0 < patch->is_new) - sha1_ptr = null_sha1; + continue; else if (get_sha1(patch->old_sha1_prefix, sha1)) /* git diff has no index line for mode/type changes */ if (!patch->lines_added && !patch->lines_deleted) { @@ -2277,13 +2281,16 @@ static void show_index_list(struct patch *list) else sha1_ptr = sha1; - printf("%06o %s ",patch->old_mode, sha1_to_hex(sha1_ptr)); - if (line_termination && quote_c_style(name, NULL, NULL, 0)) - quote_c_style(name, NULL, stdout, 0); - else - fputs(name, stdout); - putchar(line_termination); + ce = make_cache_entry(patch->old_mode, sha1_ptr, name, 0, 0); + if (add_index_entry(&result, ce, ADD_CACHE_OK_TO_ADD)) + die ("Could not add %s to temporary index", name); } + + fd = open(filename, O_WRONLY | O_CREAT, 0666); + if (fd < 0 || write_index(&result, fd) || close(fd)) + die ("Could not write temporary index to %s", filename); + + discard_index(&result); } static void stat_patch_list(struct patch *patch) @@ -2805,8 +2812,8 @@ static int apply_patch(int fd, const char *filename, int inaccurate_eof) if (apply && write_out_results(list, skipped_patch)) exit(1); - if (show_index_info) - show_index_list(list); + if (fake_ancestor) + build_fake_ancestor(list, fake_ancestor); if (diffstat) stat_patch_list(list); @@ -2914,9 +2921,11 @@ int cmd_apply(int argc, const char **argv, const char *unused_prefix) apply = 1; continue; } - if (!strcmp(arg, "--index-info")) { + if (!strcmp(arg, "--build-fake-ancestor")) { apply = 0; - show_index_info = 1; + if (++i >= argc) + die ("need a filename"); + fake_ancestor = argv[i]; continue; } if (!strcmp(arg, "-z")) { diff --git a/git-am.sh b/git-am.sh index b66173c0cd..32c46d7ed4 100755 --- a/git-am.sh +++ b/git-am.sh @@ -62,10 +62,8 @@ fall_back_3way () { mkdir "$dotest/patch-merge-tmp-dir" # First see if the patch records the index info that we can use. - git apply -z --index-info "$dotest/patch" \ - >"$dotest/patch-merge-index-info" && - GIT_INDEX_FILE="$dotest/patch-merge-tmp-index" \ - git update-index -z --index-info <"$dotest/patch-merge-index-info" && + git apply --build-fake-ancestor "$dotest/patch-merge-tmp-index" \ + "$dotest/patch" && GIT_INDEX_FILE="$dotest/patch-merge-tmp-index" \ git write-tree >"$dotest/patch-merge-base+" || cannot_fallback "Repository lacks necessary blobs to fall back on 3-way merge." From 9f569fe58f2e9a6547ae75971ebf3910be3d5872 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Thu, 27 Sep 2007 13:30:59 -0700 Subject: [PATCH 08/14] quiltimport: Skip non-existent patches When quiltimport encounters a non-existent patch in the series file, just skip to the next patch. This matches the behavior of quilt. Signed-off-by: Dan Nicholson Signed-off-by: Junio C Hamano --- git-quiltimport.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/git-quiltimport.sh b/git-quiltimport.sh index 74a54d5d08..880c81d121 100755 --- a/git-quiltimport.sh +++ b/git-quiltimport.sh @@ -71,6 +71,10 @@ commit=$(git rev-parse HEAD) mkdir $tmp_dir || exit 2 for patch_name in $(grep -v '^#' < "$QUILT_PATCHES/series" ); do + if ! [ -f "$QUILT_PATCHES/$patch_name" ] ; then + echo "$patch_name doesn't exist. Skipping." + continue + fi echo $patch_name git mailinfo "$tmp_msg" "$tmp_patch" \ <"$QUILT_PATCHES/$patch_name" >"$tmp_info" || exit 3 From 769f39861b73a374f116fcb913e5ff276fe92751 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Thu, 27 Sep 2007 14:41:23 -0700 Subject: [PATCH 09/14] Mergetool generating blank files (1.5.3) When mergetool is run from a subdirectory, "ls-files -u" nicely limits the output to conflicted files in that directory, but we need to give the full path to cat-file plumbing to grab the contents of stages. Signed-off-by: Junio C Hamano Signed-off-by: "Theodore Ts'o" --- git-mergetool.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/git-mergetool.sh b/git-mergetool.sh index a0e44f71c4..e00682a513 100755 --- a/git-mergetool.sh +++ b/git-mergetool.sh @@ -12,6 +12,7 @@ USAGE='[--tool=tool] [file to merge] ...' SUBDIRECTORY_OK=Yes . git-sh-setup require_work_tree +prefix=$(git rev-parse --show-prefix) # Returns true if the mode reflects a symlink is_symlink () { @@ -162,9 +163,9 @@ merge_file () { local_mode=`git ls-files -u -- "$path" | awk '{if ($3==2) print $1;}'` remote_mode=`git ls-files -u -- "$path" | awk '{if ($3==3) print $1;}'` - base_present && git cat-file blob ":1:$path" > "$BASE" 2>/dev/null - local_present && git cat-file blob ":2:$path" > "$LOCAL" 2>/dev/null - remote_present && git cat-file blob ":3:$path" > "$REMOTE" 2>/dev/null + base_present && git cat-file blob ":1:$prefix$path" >"$BASE" 2>/dev/null + local_present && git cat-file blob ":2:$prefix$path" >"$LOCAL" 2>/dev/null + remote_present && git cat-file blob ":3:$prefix$path" >"$REMOTE" 2>/dev/null if test -z "$local_mode" -o -z "$remote_mode"; then echo "Deleted merge conflict for '$path':" From f6e0e559340af6e300b63da061fa05ff07e3d6f6 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Fri, 28 Sep 2007 21:23:22 -0400 Subject: [PATCH 10/14] mergetool: fix emerge when running in a subdirectory Only pass the basename of the output filename when to emerge, since emerge interprets non-absolute pathnames relative to the containing directory of the output buffer. Thanks to Kelvie Wong for pointing this out. Signed-off-by: "Theodore Ts'o" --- git-mergetool.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git-mergetool.sh b/git-mergetool.sh index e00682a513..a92019a1ed 100755 --- a/git-mergetool.sh +++ b/git-mergetool.sh @@ -252,9 +252,9 @@ merge_file () { ;; emerge) if base_present ; then - emacs -f emerge-files-with-ancestor-command "$LOCAL" "$REMOTE" "$BASE" "$path" + emacs -f emerge-files-with-ancestor-command "$LOCAL" "$REMOTE" "$BASE" "$(basename "$path")" else - emacs -f emerge-files-command "$LOCAL" "$REMOTE" "$path" + emacs -f emerge-files-command "$LOCAL" "$REMOTE" "$(basename "$path")" fi status=$? save_backup From 208fe3ac7e1fd5be173cae1db4fa776390bc4e7d Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Fri, 28 Sep 2007 22:26:05 -0400 Subject: [PATCH 11/14] mergetool: Fix typo in options passed to kdiff3 Fix missing double hyphens in "-L1" and "-L2" Signed-off-by: "Theodore Ts'o" --- git-mergetool.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git-mergetool.sh b/git-mergetool.sh index a92019a1ed..9f4f3134b6 100755 --- a/git-mergetool.sh +++ b/git-mergetool.sh @@ -192,10 +192,10 @@ merge_file () { case "$merge_tool" in kdiff3) if base_present ; then - (kdiff3 --auto --L1 "$path (Base)" -L2 "$path (Local)" --L3 "$path (Remote)" \ + (kdiff3 --auto --L1 "$path (Base)" --L2 "$path (Local)" --L3 "$path (Remote)" \ -o "$path" -- "$BASE" "$LOCAL" "$REMOTE" > /dev/null 2>&1) else - (kdiff3 --auto -L1 "$path (Local)" --L2 "$path (Remote)" \ + (kdiff3 --auto --L1 "$path (Local)" --L2 "$path (Remote)" \ -o "$path" -- "$LOCAL" "$REMOTE" > /dev/null 2>&1) fi status=$? From ee8245b54a2e4ea8838d28a7bcce2e07ef887a2c Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Thu, 27 Sep 2007 01:34:59 +0200 Subject: [PATCH 12/14] git-bundle: fix commandline examples in the manpage Multiple commands were displayed in one line, making the manpage hard to read. Signed-off-by: Miklos Vajna Signed-off-by: Junio C Hamano --- Documentation/git-bundle.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.txt index 5051e2bada..0cc6511bdf 100644 --- a/Documentation/git-bundle.txt +++ b/Documentation/git-bundle.txt @@ -103,14 +103,20 @@ We set a tag in R1 (lastR2bundle) after the previous such transport, and move it afterwards to help build the bundle. in R1 on A: + +------------ $ git-bundle create mybundle master ^lastR2bundle $ git tag -f lastR2bundle master +------------ (move mybundle from A to B by some mechanism) in R2 on B: + +------------ $ git-bundle verify mybundle $ git-fetch mybundle refspec +------------ where refspec is refInBundle:localRef @@ -124,9 +130,11 @@ Also, with something like this in your config: You can first sneakernet the bundle file to ~/tmp/file.bdl and then these commands: +------------ $ git ls-remote bundle $ git fetch bundle $ git pull bundle +------------ would treat it as if it is talking with a remote side over the network. From b7bb760d5ed4881422673d32f869d140221d3564 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Sat, 29 Sep 2007 09:50:39 -0700 Subject: [PATCH 13/14] Fix revision log diff setup, avoid unnecessary diff generation We used to incorrectly start calculating diffs whenever any argument but '-z' was recognized by the diff options parsing. That was bogus, since not all arguments result in diffs being needed, so we just waste a lot of time and effort on calculating diffs that don't matter. This actually also fixes another bug in "git log". Try this: git log -C and notice how it prints an extra empty line in between log entries, even though it never prints the actual diff (because we didn't ask for any diff format, so the diff machinery never prints anything). With this patch, that bogus empty line is gone, because "revs->diff" is never set. So this isn't just a "wasted time and effort" issue, it's also a slight semantic fix. Signed-off-by: Linus Torvalds Signed-off-by: Junio C Hamano --- revision.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/revision.c b/revision.c index 33d092c3c4..658471385c 100644 --- a/revision.c +++ b/revision.c @@ -1209,8 +1209,6 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch opts = diff_opt_parse(&revs->diffopt, argv+i, argc-i); if (opts > 0) { - if (strcmp(argv[i], "-z")) - revs->diff = 1; i += opts - 1; continue; } @@ -1254,6 +1252,14 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch add_pending_object_with_mode(revs, object, def, mode); } + /* Did the user ask for any diff output? Run the diff! */ + if (revs->diffopt.output_format & ~DIFF_FORMAT_NO_OUTPUT) + revs->diff = 1; + + /* Pickaxe needs diffs */ + if (revs->diffopt.pickaxe) + revs->diff = 1; + if (revs->topo_order) revs->limited = 1; From 552ce11006e39bd07efd79946f180df47aa35b4e Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sat, 29 Sep 2007 16:07:46 -0700 Subject: [PATCH 14/14] GIT 1.5.3.3 Signed-off-by: Junio C Hamano --- Documentation/RelNotes-1.5.3.3.txt | 37 ++++++++++++++++++++++++++++++ RelNotes | 2 +- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 Documentation/RelNotes-1.5.3.3.txt diff --git a/Documentation/RelNotes-1.5.3.3.txt b/Documentation/RelNotes-1.5.3.3.txt new file mode 100644 index 0000000000..e91bd84162 --- /dev/null +++ b/Documentation/RelNotes-1.5.3.3.txt @@ -0,0 +1,37 @@ +GIT v1.5.3.3 Release Notes +========================== + +Fixes since v1.5.3.2 +-------------------- + + * git-quiltimport did not like it when a patch described in the + series file does not exist. + + * p4 importer missed executable bit in some cases. + + * The default shell on some FreeBSD did not execute the + argument parsing code correctly and made git unusable. + + * git-svn incorrectly spawned pager even when the user user + explicitly asked not to. + + * sample post-receive hook overquoted the envelope sender + value. + + * git-am got confused when the patch contained a change that is + only about type and not contents. + + * git-mergetool did not show our and their version of the + conflicted file when started from a subdirectory of the + project. + + * git-mergetool did not pass correct options when invoking diff3. + + * git-log sometimes invoked underlying "diff" machinery + unnecessarily. + +-- +exec >/var/tmp/1 +O=v1.5.3.2-29-gb7bb760 +echo O=`git describe refs/heads/maint` +git shortlog --no-merges $O..refs/heads/maint diff --git a/RelNotes b/RelNotes index 599a855303..44b610e8f8 120000 --- a/RelNotes +++ b/RelNotes @@ -1 +1 @@ -Documentation/RelNotes-1.5.3.2.txt \ No newline at end of file +Documentation/RelNotes-1.5.3.3.txt \ No newline at end of file