On Thu, Jul 22, 2021 at 01:23:06AM +0200, Ævar Arnfjörð Bjarmason wrote:
This is because the xargs command may decide to invoke the program
multiple times. We need to make sure we've got a union of its results
at the end.
For "ctags" and "etags" we used the "-a" flag for this, for cscope
that behavior is the default. Its "-u" flag disables its equivalent of
an implicit "-a" flag.
Hrm, that's not the experience I get with cscope. E.g.:
$ cscope -b wt-status.c
$ grep -m1 wt-status.c cscope.out
@wt-status.c
$ cscope -b git.c
$ grep -m1 wt-status.c cscope.out
[no output]
I wondered if I was being too hacky with my grep there. But if I
simulate more extreme cmdline-splitting like so:
diff --git a/Makefile b/Makefile
index c7c46c017d..8a1ec00938 100644
--- a/Makefile
+++ b/Makefile
@@ -2751,7 +2751,7 @@ tags: FORCE
cscope:
$(RM) cscope*
- $(FIND_SOURCE_FILES) | xargs cscope -b
+ $(FIND_SOURCE_FILES) | xargs -n1 cscope -b
### Detect prefix changes
TRACK_PREFIX = $(bindir_SQ):$(gitexecdir_SQ):$(template_dir_SQ):$(prefix_SQ):\
then I get a file that is much smaller (1MB versus 9MB), and fails to
find lots of things:
$ cscope -d -L1cmd_pack_objects
[no output]
(by the way, I confused myself several times while testing this because
without "-d", it will actually rebuild the index using files in the
current directory. So something like " cscope -L1main" gives the same
result in both cases, or even if you don't have a cscope.out file at
all!)
But it really seems like cscope is not appending as we'd want. From
skimming the manpage, I think replacing xargs with "cscope -b -i -"
should work (and seems to for me).
-Peff