diff options
-rw-r--r-- | Documentation/RelNotes-1.5.6.5.txt | 9 | ||||
-rw-r--r-- | Documentation/git-diff-tree.txt | 6 | ||||
-rw-r--r-- | Documentation/git.txt | 3 | ||||
-rw-r--r-- | builtin-commit.c | 11 | ||||
-rw-r--r-- | builtin-tag.c | 3 | ||||
-rw-r--r-- | parse-options.c | 12 | ||||
-rw-r--r-- | parse-options.h | 2 | ||||
-rwxr-xr-x | t/t7004-tag.sh | 20 | ||||
-rwxr-xr-x | t/t7500-commit.sh | 29 |
9 files changed, 80 insertions, 15 deletions
diff --git a/Documentation/RelNotes-1.5.6.5.txt b/Documentation/RelNotes-1.5.6.5.txt index 23981acf3..47ca17246 100644 --- a/Documentation/RelNotes-1.5.6.5.txt +++ b/Documentation/RelNotes-1.5.6.5.txt @@ -6,6 +6,9 @@ Fixes since v1.5.6.4 * "git cvsimport" used to spit out "UNKNOWN LINE..." diagnostics to stdout. +* "git commit -F filename" and "git tag -F filename" run from subdirectories + did not read the right file. + * "git init --template=" with blank "template" parameter linked files under root directories to .git, which was a total nonsense. Instead, it means "I do not want to use anything from the template directory". @@ -24,9 +27,3 @@ Fixes since v1.5.6.4 header properly. Contains other various documentation fixes. - --- -exec >/var/tmp/1 -echo O=$(git describe maint) -O=v1.5.6.4-26-g2b6ca6d -git shortlog --no-merges $O..maint diff --git a/Documentation/git-diff-tree.txt b/Documentation/git-diff-tree.txt index 8c8f35b7a..1fdf20dcc 100644 --- a/Documentation/git-diff-tree.txt +++ b/Documentation/git-diff-tree.txt @@ -49,13 +49,13 @@ include::diff-options.txt[] --stdin:: When '--stdin' is specified, the command does not take <tree-ish> arguments from the command line. Instead, it - reads either one <commit> or a pair of <tree-ish> + reads either one <commit> or a list of <commit> separated with a single space from its standard input. + When a single commit is given on one line of such input, it compares the commit with its parents. The following flags further affects its -behavior. This does not apply to the case where two <tree-ish> -separated with a single space are given. +behavior. The remaining commits, when given, are used as if they are +parents of the first commit. -m:: By default, 'git-diff-tree --stdin' does not show diff --git a/Documentation/git.txt b/Documentation/git.txt index 3da5bf050..b1cb97236 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -43,9 +43,10 @@ unreleased) version of git, that is available from 'master' branch of the `git.git` repository. Documentation for older releases are available here: -* link:v1.5.6.4/git.html[documentation for release 1.5.6.4] +* link:v1.5.6.5/git.html[documentation for release 1.5.6.5] * release notes for + link:RelNotes-1.5.6.5.txt[1.5.6.5], link:RelNotes-1.5.6.4.txt[1.5.6.4], link:RelNotes-1.5.6.3.txt[1.5.6.3], link:RelNotes-1.5.6.2.txt[1.5.6.2], diff --git a/builtin-commit.c b/builtin-commit.c index b783e6eb4..649c8beb3 100644 --- a/builtin-commit.c +++ b/builtin-commit.c @@ -46,7 +46,7 @@ static enum { COMMIT_PARTIAL, } commit_style; -static char *logfile, *force_author; +static const char *logfile, *force_author; static const char *template_file; static char *edit_message, *use_message; static char *author_name, *author_email, *author_date; @@ -711,11 +711,14 @@ static int message_is_empty(struct strbuf *sb, int start) } static int parse_and_validate_options(int argc, const char *argv[], - const char * const usage[]) + const char * const usage[], + const char *prefix) { int f = 0; argc = parse_options(argc, argv, builtin_commit_options, usage, 0); + logfile = parse_options_fix_filename(prefix, logfile); + template_file = parse_options_fix_filename(prefix, template_file); if (logfile || message.len || use_message) use_editor = 0; @@ -836,7 +839,7 @@ int cmd_status(int argc, const char **argv, const char *prefix) if (wt_status_use_color == -1) wt_status_use_color = git_use_color_default; - argc = parse_and_validate_options(argc, argv, builtin_status_usage); + argc = parse_and_validate_options(argc, argv, builtin_status_usage, prefix); index_file = prepare_index(argc, argv, prefix); @@ -929,7 +932,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix) git_config(git_commit_config, NULL); - argc = parse_and_validate_options(argc, argv, builtin_commit_usage); + argc = parse_and_validate_options(argc, argv, builtin_commit_usage, prefix); index_file = prepare_index(argc, argv, prefix); diff --git a/builtin-tag.c b/builtin-tag.c index 325b1b263..f2853d08c 100644 --- a/builtin-tag.c +++ b/builtin-tag.c @@ -346,7 +346,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix) int annotate = 0, sign = 0, force = 0, lines = 0, list = 0, delete = 0, verify = 0; - char *msgfile = NULL, *keyid = NULL; + const char *msgfile = NULL, *keyid = NULL; struct msg_arg msg = { 0, STRBUF_INIT }; struct option options[] = { OPT_BOOLEAN('l', NULL, &list, "list tag names"), @@ -372,6 +372,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix) git_config(git_tag_config, NULL); argc = parse_options(argc, argv, options, git_tag_usage, 0); + msgfile = parse_options_fix_filename(prefix, msgfile); if (keyid) { sign = 1; diff --git a/parse-options.c b/parse-options.c index 71a7acf4e..fd08bb425 100644 --- a/parse-options.c +++ b/parse-options.c @@ -483,3 +483,15 @@ int parse_opt_approxidate_cb(const struct option *opt, const char *arg, *(unsigned long *)(opt->value) = approxidate(arg); return 0; } + +/* + * This should really be OPTION_FILENAME type as a part of + * parse_options that take prefix to do this while parsing. + */ +extern const char *parse_options_fix_filename(const char *prefix, const char *file) +{ + if (!file || !prefix || is_absolute_path(file) || !strcmp("-", file)) + return file; + return prefix_filename(prefix, strlen(prefix), file); +} + diff --git a/parse-options.h b/parse-options.h index bc317e751..5199950c0 100644 --- a/parse-options.h +++ b/parse-options.h @@ -159,4 +159,6 @@ extern int parse_opt_approxidate_cb(const struct option *, const char *, int); "use <n> digits to display SHA-1s", \ PARSE_OPT_OPTARG, &parse_opt_abbrev_cb, 0 } +extern const char *parse_options_fix_filename(const char *prefix, const char *file); + #endif diff --git a/t/t7004-tag.sh b/t/t7004-tag.sh index bc7ce2cbb..8d44c2ed1 100755 --- a/t/t7004-tag.sh +++ b/t/t7004-tag.sh @@ -1070,4 +1070,24 @@ test_expect_success \ test_cmp expect actual ' +test_expect_success 'filename for the message is relative to cwd' ' + mkdir subdir && + echo "Tag message in top directory" >msgfile-5 && + echo "Tag message in sub directory" >subdir/msgfile-5 && + ( + cd subdir && + git tag -a -F msgfile-5 tag-from-subdir + ) && + git cat-file tag tag-from-subdir | grep "in sub directory" +' + +test_expect_success 'filename for the message is relative to cwd' ' + echo "Tag message in sub directory" >subdir/msgfile-6 && + ( + cd subdir && + git tag -a -F msgfile-6 tag-from-subdir-2 + ) && + git cat-file tag tag-from-subdir-2 | grep "in sub directory" +' + test_done diff --git a/t/t7500-commit.sh b/t/t7500-commit.sh index d89f91a6f..809bdba63 100755 --- a/t/t7500-commit.sh +++ b/t/t7500-commit.sh @@ -138,4 +138,33 @@ test_expect_success '--signoff' ' diff expect output ' +test_expect_success 'commit message from file (1)' ' + mkdir subdir && + echo "Log in top directory" >log && + echo "Log in sub directory" >subdir/log && + ( + cd subdir && + git commit --allow-empty -F log + ) && + commit_msg_is "Log in sub directory" +' + +test_expect_success 'commit message from file (2)' ' + rm -f log && + echo "Log in sub directory" >subdir/log && + ( + cd subdir && + git commit --allow-empty -F log + ) && + commit_msg_is "Log in sub directory" +' + +test_expect_success 'commit message from stdin' ' + ( + cd subdir && + echo "Log with foo word" | git commit --allow-empty -F - + ) && + commit_msg_is "Log with foo word" +' + test_done |