summaryrefslogtreecommitdiffstats
path: root/cervisia/cervisia-normalize_cvsroot.pl
diff options
context:
space:
mode:
Diffstat (limited to 'cervisia/cervisia-normalize_cvsroot.pl')
-rw-r--r--cervisia/cervisia-normalize_cvsroot.pl53
1 files changed, 53 insertions, 0 deletions
diff --git a/cervisia/cervisia-normalize_cvsroot.pl b/cervisia/cervisia-normalize_cvsroot.pl
new file mode 100644
index 00000000..8a96dcb8
--- /dev/null
+++ b/cervisia/cervisia-normalize_cvsroot.pl
@@ -0,0 +1,53 @@
+#!/usr/bin/perl
+
+# (copied from kdesdk/cervisia/misc.cpp)
+# These regular expression parts aren't useful to check the validity of the
+# CVSROOT specification. They are just used to extract the different parts of it.
+$usernamerx = "([a-z0-9_][a-z0-9_-]*)?";
+$passwordrx = "(:[^@]+)?";
+$hostrx = "([^:/]+)";
+$portrx = "(:(\\d*))?";
+$pathrx = "(/.*)";
+
+# concat above regexps into a single expression
+$regexp = join('', ":pserver:(", $usernamerx, $passwordrx, "@)?", $hostrx, $portrx, $pathrx);
+
+$loginuser = getlogin || getpwuid($<);
+
+while(<>)
+{
+ # skip empty lines
+ next if /^$/;
+
+ # config group for a repository?
+ if( /^\[Repository-(.+)\]$/ )
+ {
+ $oldcvsroot = $1;
+
+ # pserver CVSROOT specification?
+ if( $oldcvsroot =~ m/($regexp)/ )
+ {
+ # extract username, hostname, port and path from CVSROOT
+ $username = $3;
+ $hostname = $5;
+ $port = $7;
+ $path = $8;
+
+ # replace empty port number
+ $port =~ s/^$/2401/;
+
+ # replace empty username
+ $username =~ s/^$/$loginuser/;
+
+ # create normalized CVSROOT specification
+ $newcvsroot = join('', ":pserver:", $username, "@", $hostname, ":", $port, $path);
+
+ print "# DELETEGROUP [Repository-$oldcvsroot]\n";
+ print "[Repository-$newcvsroot]\n";
+ }
+
+ next;
+ }
+
+ print $_;
+}