mirror of
https://github.com/git/git.git
synced 2026-01-23 15:27:19 +09:00
last-modified: change default max-depth to 0
By default git-last-modified(1) doesn't recurse into subtrees. So when
the pathspec contained a path in a subtree, the command would only print
the commit information about the parent tree of the path, like:
$ git last-modified -- path/file
aaa0aab1bbb2bcc3ccc4ddd5dde6eee7eff8fff9 path
Change the default behavior to give commit information about the exact
path instead:
$ git last-modified -- path/file
aaa0aab1bbb2bcc3ccc4ddd5dde6eee7eff8fff9 path/file
To achieve this, the default max-depth is changed to 0 and recursive is
always enabled.
The handling of option '-r' is modified to disable a max-depth,
resulting in the behavior of this option to remain unchanged.
No existing tests were modified, because there didn't exist any tests
covering the example above. But more tests are added to cover this now.
Signed-off-by: Toon Claes <toon@iotcl.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
9bfaf78cb2
commit
9dcc09bed1
@ -25,13 +25,14 @@ OPTIONS
|
||||
|
||||
`-r`::
|
||||
`--recursive`::
|
||||
Instead of showing tree entries, step into subtrees and show all entries
|
||||
inside them recursively.
|
||||
Recursively traverse into all subtrees. By default, the command only
|
||||
shows tree entries matching the `<pathspec>`. With this option, it
|
||||
descends into subtrees and displays all entries within them.
|
||||
Equivalent to `--max-depth=-1`.
|
||||
|
||||
`-t`::
|
||||
`--show-trees`::
|
||||
Show tree entries even when recursing into them. It has no effect
|
||||
without `--recursive`.
|
||||
Show tree entries even when recursing into them.
|
||||
|
||||
`--max-depth=<depth>`::
|
||||
For each pathspec given on the command line, traverse at most `<depth>`
|
||||
|
||||
@ -53,7 +53,6 @@ define_commit_slab(active_paths_for_commit, struct bitmap *);
|
||||
struct last_modified {
|
||||
struct hashmap paths;
|
||||
struct rev_info rev;
|
||||
bool recursive;
|
||||
bool show_trees;
|
||||
bool nul_termination;
|
||||
int max_depth;
|
||||
@ -481,14 +480,10 @@ static int last_modified_init(struct last_modified *lm, struct repository *r,
|
||||
lm->rev.no_commit_id = 1;
|
||||
lm->rev.diff = 1;
|
||||
lm->rev.diffopt.flags.no_recursive_diff_tree_combined = 1;
|
||||
lm->rev.diffopt.flags.recursive = lm->recursive;
|
||||
lm->rev.diffopt.flags.recursive = 1;
|
||||
lm->rev.diffopt.flags.tree_in_recursive = lm->show_trees;
|
||||
|
||||
if (lm->max_depth >= 0) {
|
||||
lm->rev.diffopt.flags.recursive = 1;
|
||||
lm->rev.diffopt.max_depth = lm->max_depth;
|
||||
lm->rev.diffopt.max_depth_valid = 1;
|
||||
}
|
||||
lm->rev.diffopt.max_depth = lm->max_depth;
|
||||
lm->rev.diffopt.max_depth_valid = lm->max_depth >= 0;
|
||||
|
||||
argc = setup_revisions(argc, argv, &lm->rev, NULL);
|
||||
if (argc > 1) {
|
||||
@ -524,8 +519,8 @@ int cmd_last_modified(int argc, const char **argv, const char *prefix,
|
||||
};
|
||||
|
||||
struct option last_modified_options[] = {
|
||||
OPT_BOOL('r', "recursive", &lm.recursive,
|
||||
N_("recurse into subtrees")),
|
||||
OPT_SET_INT('r', "recursive", &lm.max_depth,
|
||||
N_("recurse into subtrees"), -1),
|
||||
OPT_BOOL('t', "show-trees", &lm.show_trees,
|
||||
N_("show tree entries when recursing into subtrees")),
|
||||
OPT_INTEGER_F(0, "max-depth", &lm.max_depth,
|
||||
@ -535,12 +530,6 @@ int cmd_last_modified(int argc, const char **argv, const char *prefix,
|
||||
OPT_END()
|
||||
};
|
||||
|
||||
/*
|
||||
* Set the default of a max-depth to "unset". This will change in a
|
||||
* subsequent commit.
|
||||
*/
|
||||
lm.max_depth = -1;
|
||||
|
||||
argc = parse_options(argc, argv, prefix, last_modified_options,
|
||||
last_modified_usage,
|
||||
PARSE_OPT_KEEP_ARGV0 | PARSE_OPT_KEEP_UNKNOWN_OPT);
|
||||
|
||||
@ -85,6 +85,41 @@ test_expect_success 'last-modified subdir recursive' '
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'last-modified subdir non-recursive' '
|
||||
check_last_modified a <<-\EOF
|
||||
3 a
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'last-modified path in subdir non-recursive' '
|
||||
check_last_modified a/file <<-\EOF
|
||||
2 a/file
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'last-modified subdir with wildcard non-recursive' '
|
||||
check_last_modified a/* <<-\EOF
|
||||
3 a/b
|
||||
2 a/file
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'last-modified with negative max-depth' '
|
||||
check_last_modified --max-depth=-1 <<-\EOF
|
||||
3 a/b/file
|
||||
2 a/file
|
||||
1 file
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'last-modified with max-depth of 1' '
|
||||
check_last_modified --max-depth=1 <<-\EOF
|
||||
3 a/b
|
||||
2 a/file
|
||||
1 file
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'last-modified from non-HEAD commit' '
|
||||
check_last_modified HEAD^ <<-\EOF
|
||||
2 a
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user