`-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>`
struct last_modified {
struct hashmap paths;
struct rev_info rev;
- bool recursive;
bool show_trees;
bool nul_termination;
int max_depth;
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) {
};
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,
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);
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