diff options
-rw-r--r-- | Documentation/core-tutorial.txt | 12 | ||||
-rw-r--r-- | Documentation/git-tag.txt | 4 | ||||
-rw-r--r-- | archive-tar.c | 6 | ||||
-rw-r--r-- | archive-zip.c | 6 | ||||
-rw-r--r-- | builtin-fetch.c | 28 | ||||
-rw-r--r-- | builtin-tag.c | 2 | ||||
-rw-r--r-- | parse-options.c | 2 | ||||
-rwxr-xr-x | t/t5000-tar-tree.sh | 15 |
8 files changed, 45 insertions, 30 deletions
diff --git a/Documentation/core-tutorial.txt b/Documentation/core-tutorial.txt index aa40dfd36..5a5531222 100644 --- a/Documentation/core-tutorial.txt +++ b/Documentation/core-tutorial.txt @@ -535,18 +535,18 @@ with the associated patches use the more complex (and much more powerful) ---------------- -$ git-whatchanged -p --root +$ git-whatchanged -p ---------------- and you will see exactly what has changed in the repository over its short history. [NOTE] -The `\--root` flag is a flag to `git-diff-tree` to tell it to -show the initial aka 'root' commit too. Normally you'd probably not -want to see the initial import diff, but since the tutorial project -was started from scratch and is so small, we use it to make the result -a bit more interesting. +When using the above two commands, the initial commit will be shown. +If this is a problem because it is huge, you can hide it by setting +the log.showroot configuration variable to false. Having this, you +can still show it for each command just adding the `\--root` option, +which is a flag for `git-diff-tree` accepted by both commands. With that, you should now be having some inkling of what git does, and can explore on your own. diff --git a/Documentation/git-tag.txt b/Documentation/git-tag.txt index c22fb7117..4b6fd90ea 100644 --- a/Documentation/git-tag.txt +++ b/Documentation/git-tag.txt @@ -11,7 +11,7 @@ SYNOPSIS [verse] 'git-tag' [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] <name> [<head>] 'git-tag' -d <name>... -'git-tag' [-n [<num>]] -l [<pattern>] +'git-tag' [-n[<num>]] -l [<pattern>] 'git-tag' -v <name>... DESCRIPTION @@ -57,7 +57,7 @@ OPTIONS -v:: Verify the gpg signature of the given tag names. --n <num>:: +-n<num>:: <num> specifies how many lines from the annotation, if any, are printed when using -l. The default is not to print any annotation lines. diff --git a/archive-tar.c b/archive-tar.c index 30aa2e23f..4add80284 100644 --- a/archive-tar.c +++ b/archive-tar.c @@ -17,6 +17,7 @@ static time_t archive_time; static int tar_umask = 002; static int verbose; static const struct commit *commit; +static size_t base_len; /* writes out the whole block, but only if it is full */ static void write_if_needed(void) @@ -251,8 +252,8 @@ static int write_tar_entry(const unsigned char *sha1, buffer = NULL; size = 0; } else { - buffer = sha1_file_to_archive(path.buf, sha1, mode, &type, - &size, commit); + buffer = sha1_file_to_archive(path.buf + base_len, sha1, mode, + &type, &size, commit); if (!buffer) die("cannot read %s", sha1_to_hex(sha1)); } @@ -272,6 +273,7 @@ int write_tar_archive(struct archiver_args *args) archive_time = args->time; verbose = args->verbose; commit = args->commit; + base_len = args->base ? strlen(args->base) : 0; if (args->commit_sha1) write_global_extended_header(args->commit_sha1); diff --git a/archive-zip.c b/archive-zip.c index 74e30f620..18c0f8710 100644 --- a/archive-zip.c +++ b/archive-zip.c @@ -13,6 +13,7 @@ static int verbose; static int zip_date; static int zip_time; static const struct commit *commit; +static size_t base_len; static unsigned char *zip_dir; static unsigned int zip_dir_size; @@ -197,8 +198,8 @@ static int write_zip_entry(const unsigned char *sha1, if (S_ISREG(mode) && zlib_compression_level != 0) method = 8; result = 0; - buffer = sha1_file_to_archive(path, sha1, mode, &type, &size, - commit); + buffer = sha1_file_to_archive(path + base_len, sha1, mode, + &type, &size, commit); if (!buffer) die("cannot read %s", sha1_to_hex(sha1)); crc = crc32(crc, buffer, size); @@ -321,6 +322,7 @@ int write_zip_archive(struct archiver_args *args) zip_dir_size = ZIP_DIRECTORY_MIN_SIZE; verbose = args->verbose; commit = args->commit; + base_len = args->base ? strlen(args->base) : 0; if (args->base && plen > 0 && args->base[plen - 1] == '/') { char *base = xstrdup(args->base); diff --git a/builtin-fetch.c b/builtin-fetch.c index 5841b3e51..139a6b10c 100644 --- a/builtin-fetch.c +++ b/builtin-fetch.c @@ -215,13 +215,6 @@ static int update_local_ref(struct ref *ref, if (type < 0) die("object %s not found", sha1_to_hex(ref->new_sha1)); - if (!*ref->name) { - /* Not storing */ - if (verbose) - sprintf(display, "* branch %s -> FETCH_HEAD", remote); - return 0; - } - if (!hashcmp(ref->old_sha1, ref->new_sha1)) { if (verbose) sprintf(display, "= %-*s %-*s -> %s", SUMMARY_WIDTH, @@ -365,16 +358,21 @@ static int store_updated_refs(const char *url, struct ref *ref_map) rm->merge ? "" : "not-for-merge", note); - if (ref) { + if (ref) update_local_ref(ref, what, verbose, note); - if (*note) { - if (!shown_url) { - fprintf(stderr, "From %.*s\n", - url_len, url); - shown_url = 1; - } - fprintf(stderr, " %s\n", note); + else if (verbose) + sprintf(note, "* %-*s %-*s -> FETCH_HEAD", + SUMMARY_WIDTH, *kind ? kind : "branch", + REFCOL_WIDTH, *what ? what : "HEAD"); + else + *note = '\0'; + if (*note) { + if (!shown_url) { + fprintf(stderr, "From %.*s\n", + url_len, url); + shown_url = 1; } + fprintf(stderr, " %s\n", note); } } fclose(fp); diff --git a/builtin-tag.c b/builtin-tag.c index 8dd959fe1..129ff57f1 100644 --- a/builtin-tag.c +++ b/builtin-tag.c @@ -16,7 +16,7 @@ static const char * const git_tag_usage[] = { "git-tag [-a|-s|-u <key-id>] [-f] [-m <msg>|-F <file>] <tagname> [<head>]", "git-tag -d <tagname>...", - "git-tag -l [-n [<num>]] [<pattern>]", + "git-tag -l [-n[<num>]] [<pattern>]", "git-tag -v <tagname>...", NULL }; diff --git a/parse-options.c b/parse-options.c index e87cafbe4..acf3fe3a1 100644 --- a/parse-options.c +++ b/parse-options.c @@ -344,7 +344,7 @@ void usage_with_options_internal(const char * const *usagestr, break; case OPTION_INTEGER: if (opts->flags & PARSE_OPT_OPTARG) - pos += fprintf(stderr, " [<n>]"); + pos += fprintf(stderr, "[<n>]"); else pos += fprintf(stderr, " <n>"); break; diff --git a/t/t5000-tar-tree.sh b/t/t5000-tar-tree.sh index dca2067b2..fa62b6aa2 100755 --- a/t/t5000-tar-tree.sh +++ b/t/t5000-tar-tree.sh @@ -109,9 +109,10 @@ test_expect_success \ 'diff -r a c/prefix/a' test_expect_success \ - 'create an archive with a substfiles' \ + 'create archives with substfiles' \ 'echo "substfile?" export-subst >a/.gitattributes && git archive HEAD >f.tar && + git archive --prefix=prefix/ HEAD >g.tar && rm a/.gitattributes' test_expect_success \ @@ -127,6 +128,18 @@ test_expect_success \ ' test_expect_success \ + 'extract substfiles from archive with prefix' \ + '(mkdir g && cd g && $TAR xf -) <g.tar' + +test_expect_success \ + 'validate substfile contents from archive with prefix' \ + 'git log --max-count=1 "--pretty=format:A${SUBSTFORMAT}O" HEAD \ + >g/prefix/a/substfile1.expected && + diff g/prefix/a/substfile1.expected g/prefix/a/substfile1 && + diff a/substfile2 g/prefix/a/substfile2 +' + +test_expect_success \ 'git archive --format=zip' \ 'git archive --format=zip HEAD >d.zip' |