summaryrefslogtreecommitdiff
path: root/support
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2005-05-13 18:37:11 +0000
committerWayne Davison <wayned@samba.org>2005-05-13 18:37:11 +0000
commit1848fd6fa125c1603fb12742392d6cb7d87212c0 (patch)
tree09567524585d9b0ad2aa0a65fcd1221a2fc583ba /support
parentf2a4853c93136bfa282cff767873064db3ebb28c (diff)
downloadrsync-1848fd6fa125c1603fb12742392d6cb7d87212c0.tar.gz
An example filter script to maintain .cvsinclude files.
Diffstat (limited to 'support')
-rwxr-xr-xsupport/cvs2includes43
1 files changed, 43 insertions, 0 deletions
diff --git a/support/cvs2includes b/support/cvs2includes
new file mode 100755
index 00000000..29f14dcf
--- /dev/null
+++ b/support/cvs2includes
@@ -0,0 +1,43 @@
+#!/usr/bin/perl
+#
+# This script finds all CVS/Entries files in the current directory and below
+# and creates a local .cvsinclude file with non-inherited rules including each
+# checked-in file. Then, use this option whenever using --cvs-exclude (-C):
+#
+# -f ': .cvsinclude'
+#
+# (You could alternately put ": .cvsinclude" into an .rsync-filter file and
+# use the -F option, which is easier to type.)
+#
+# That ensures that all checked-in files/dirs are included in the transfer.
+#
+# The downside is that you need to remember to re-run cvs2includes whenever
+# You add a new file to the project.
+use strict;
+
+open(FIND, 'find . -name CVS -type d |') or die $!;
+while (<FIND>) {
+ chomp;
+ s#^\./##;
+
+ my $entries = "$_/Entries";
+ s/CVS$/.cvsinclude/;
+ my $filter = $_;
+
+ open(ENTRIES, $entries) or die "Unable to open $entries: $!\n";
+ my @includes;
+ while (<ENTRIES>) {
+ push(@includes, $1) if m#/(.+?)/#;
+ }
+ close ENTRIES;
+ if (@includes) {
+ open(FILTER, ">$filter") or die "Unable to write $filter: $!\n";
+ print FILTER '+ /', join("\n+ /", @includes), "\n";
+ close FILTER;
+ print "Updated $filter\n";
+ } elsif (-f $filter) {
+ unlink($filter);
+ print "Removed $filter\n";
+ }
+}
+close FIND;