I took a look at adding support for limiting monotone's recursive
predilections, which seems to be important option for some. I need
it for better zsh file completion. Anyway I was able to add it in
suprisingly few (to me at least) # of lines.
I used --depth=X as the option and tested the code by adding it to
"ls known".
X above is used as a mechanism to indicate how many times the restrictions
code in app_state.cc:restriction_includes may do a branch_path to walk up
the directory tree.
Thus for a tree:
./a
./a/b
./a/b/c
./a/b/c/d
./a/b/c/d/file
./a/b/c/file
./a/b/file
./a/file
./file
(%:~/tmp/root) monotone --db=../mt.db --depth=1 ls known .
file
(%:~/tmp/root) monotone --db=../mt.db --depth=2 ls known .
a/file
file
(%:~/tmp/root) monotone --db=../mt.db --depth=3 ls known .
a/b/file
a/file
file
and after "cd a/b/"
(%:~/tmp/root/a/b) monotone --db=../../../mt.db --depth=1 ls known .
a/b/file
(%:~/tmp/root/a/b) monotone --db=../../../mt.db --depth=2 ls known .
a/b/c/file
a/b/file
and after "cd .."
(%:~/tmp/root/a) monotone --db=../../mt.db --depth=2 ls known b
a/b/c/file
a/b/file
etc.
This gives me what I need. When no --depth is provided "." works as
before. Giving the whole subtree from that point.
A few questions:
1) functionality look ok?
2) --depth as param name ok?
3) patch look ok (-testcase & Changelog!)
4) I want to add this to "list" obviously, but any other subcommands
you'd nominate for working with this option? (must be something
that uses restriction code!)
jr
#
# patch "app_state.cc"
# from [392734be5cdd5ba62dd214b28aa434e67b678171]
# to [07daa7280d90fa32feb7769eed2a97fd4b10a940]
#
# patch "commands.cc"
# from [711e8e878e0b90261086a5a2118f9bc221c692a1]
# to [0fa1311866b0e30bee3d3b21ea3976f2d936ea7d]
#
--- app_state.cc
+++ app_state.cc
@@ -195,12 +195,13 @@
// careful about what goes in to the restricted path set we just
// check for this special case here.
- if (restrictions.find(dot) != restrictions.end())
+ if ((-1 == depth) && restrictions.find(dot) != restrictions.end())
{
return true;
}
fs::path test = mkpath(path());
+ long branch_depth = 0;
while (!test.empty())
{
@@ -220,9 +221,17 @@
L(F("path '%s' not found in restricted path set; '%s' excluded\n")
% test.string() % path());
}
+
+ if (depth==branch_depth) return false;
test = test.branch_path();
+ ++branch_depth;
}
-
+
+ if ((-1 != depth) && (restrictions.find(dot) != restrictions.end()))
+ {
+ return (branch_depth <= depth);
+ }
+
return false;
}
--- commands.cc
+++ commands.cc
@@ -1705,7 +1705,7 @@
"missing",
"show database objects, or the current working copy manifest,\n"
"or unknown, intentionally ignored, or missing state files",
- OPT_NONE)
+ OPT_DEPTH)
{
if (args.size() == 0)
throw usage(name);
_______________________________________________
Monotone-devel mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/monotone-devel