tags 290332 +patch
thanks
Hi all,
I stumbled across this issue recently, had a look at the code and fixed
it for me.
Attached is a patch, that extends the list of known revision
information directories to include Arch, Darcs, Git, and Mercurial.
To ease the future development of an --ignore option, the previous
logic is changed to use a loop over a static list, instead of hard-coded
comparisons.
If I have missed some other important SCM implementation, or got some of
the corresponding directories wrong, please let me know.
Best regards,
Philipp
From e8da6643c57b8b8f6a18c11fe2cf2c313efefc8b Mon Sep 17 00:00:00 2001
From: Philipp A. Hartmann p...@sorgh.de
Date: Thu, 5 Feb 2009 13:03:50 +0100
Subject: [PATCH] ignore revision info of more SCMs
This commit extends the list of known revision information
directories to include Arch, Darcs, Git, and Mercurial.
To ease the future development of an --ignore option, the
logic is changed to use a static list, instead of hard-coded
comparisons.
Signed-off-by: Philipp A. Hartmann p...@sorgh.de
---
lndir/lndir.c | 33 +
lndir/lndir.man | 11 +++
2 files changed, 28 insertions(+), 16 deletions(-)
diff --git a/lndir/lndir.c b/lndir/lndir.c
index cd1d983..f391761 100644
--- a/lndir/lndir.c
+++ b/lndir/lndir.c
@@ -141,6 +141,21 @@ equivalent(char *lname, char *rname, char **p)
return !strcmp(lname, rname);
}
+static char * revinfo_dirs[] =
+{
+ BitKeeper,
+ RCS,
+ SCCS,
+ CVS,
+ CVS.adm,
+ .svn,
+ {arch},
+ .arch-ids,
+ _darcs,
+ .git,
+ .hg,
+ NULL /* end of list */
+};
/* Recursively create symbolic links from the current directory to the from
directory. Assumes that files described by fs and ts are directories. */
@@ -153,7 +168,7 @@ dodir (char *fn,/* name of from directory,
either absolute or
{
DIR *df;
struct dirent *dp;
-char buf[MAXPATHLEN + 1], *p;
+char buf[MAXPATHLEN + 1], *p, **rd;
char symbuf[MAXPATHLEN + 1];
char basesym[MAXPATHLEN + 1];
struct stat sb, sc;
@@ -212,17 +227,11 @@ dodir (char *fn, /* name of from directory,
either absolute or
dp-d_name[2] == '\0')))
continue;
if (!with_revinfo) {
- if (!strcmp (dp-d_name, BitKeeper))
- continue;
- if (!strcmp (dp-d_name, RCS))
- continue;
- if (!strcmp (dp-d_name, SCCS))
- continue;
- if (!strcmp (dp-d_name, CVS))
- continue;
- if (!strcmp (dp-d_name, CVS.adm))
- continue;
- if (!strcmp (dp-d_name, .svn))
+ for (rd = revinfo_dirs; *rd; ++rd) {
+ if (!strcmp (dp-d_name, *rd))
+ break;
+ }
+ if (*rd) /* found revinfo dir */
continue;
}
ocurdir = rcurdir;
diff --git a/lndir/lndir.man b/lndir/lndir.man
index 244e8a5..4823896 100644
--- a/lndir/lndir.man
+++ b/lndir/lndir.man
@@ -76,8 +76,10 @@ argument may be relative (e.g., ../src) and is relative to
(not the current directory).
.PP
.\ CVS.adm is used by the Concurrent Versions System.
-Note that BitKeeper, RCS, SCCS, .svn, CVS and CVS.adm directories are
-shadowed only if the \fB\-withrevinfo\fP flag is specified.
+.\ .hg is used by Mercurial.
+Note that BitKeeper, RCS, SCCS, CVS, CVS.adm, {arch}, .arch-ids,
+_darcs, .git, .hg, and .svn directories are shadowed only if the
+\fB\-withrevinfo\fP flag is specified.
.PP
If you add files, simply run
.I lndir
@@ -105,8 +107,9 @@ If the link is to a directory, this is almost certainly the
wrong thing.
This option exists mostly to emulate the behavior the C version of
\fIlndir\fP had in X11R6. Its use is not recommended.
.IP \-withrevinfo
-Causes any BitKeeper, RCS, SCCS, .svn, CVS and CVS.adm subdirectories to be
-treated as any other directory, rather than ignored.
+Causes any BitKeeper, RCS, SCCS, CVS, CVS.adm, {arch}, .arch-ids,
+_darcs, .git, .hg, and .svn subdirectories to be treated as
+any other directory, rather than ignored.
.SH DIAGNOSTICS
The program displays the name of each subdirectory it enters, followed
by a colon. The \fB\-silent\fP option suppresses these messages.
--
1.6.0.6
signature.asc
Description: PGP signature