rubys 01/10/07 14:16:30
Modified: proposal/gump gen.bat gen.sh
proposal/gump/java Module.java
Removed: proposal/gump/perl cvslogin.pl
Log:
Replace perl implementation of cvs login with a Java one. This code
is based on code from jakarta-ant; will provide feedback to the ant-dev
mailing list of issues found in the original code base.
Revision Changes Path
1.11 +6 -4 jakarta-alexandria/proposal/gump/gen.bat
Index: gen.bat
===================================================================
RCS file: /home/cvs/jakarta-alexandria/proposal/gump/gen.bat,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- gen.bat 2001/10/07 15:54:47 1.10
+++ gen.bat 2001/10/07 21:16:29 1.11
@@ -8,8 +8,13 @@
SET CLASSPATH=%XALAN%\bin\xalan.jar;%XALAN%\bin\xerces.jar;%CLASSPATH%
SET SOURCE=%1
+
IF "%1"=="" SET SOURCE=%COMPUTERNAME%.xml
+IF "%HOME%"=="" SET HOME=%USERPROFILE%
+IF "%HOME%"=="" SET HOME=%HOMEDRIVE%%HOMEPATH%
+IF "%HOME%"=="" SET HOME=C:\
+
if exist work rmdir /s /q work
mkdir work
@@ -23,7 +28,7 @@
jar cf jenny.jar -C classes .
if errorlevel 1 goto fail
echo.
-java -classpath jenny.jar;%CLASSPATH% Jenny %SOURCE%
+java -Duser.home=%HOME% -classpath jenny.jar;%CLASSPATH% Jenny %SOURCE%
if not errorlevel 0 goto fail
REM ********************************************************************
@@ -96,9 +101,6 @@
cd work
puball %SOURCE%
cd ..
-
-REM Automatic login to each :pserver: cvsroot
-perl perl\cvslogin.pl work\merge.xml
goto eof
:fail
1.15 +0 -4 jakarta-alexandria/proposal/gump/gen.sh
Index: gen.sh
===================================================================
RCS file: /home/cvs/jakarta-alexandria/proposal/gump/gen.sh,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- gen.sh 2001/10/07 15:54:47 1.14
+++ gen.sh 2001/10/07 21:16:29 1.15
@@ -123,9 +123,5 @@
cd ..
fi
-# Automatic login to each :pserver: cvsroot
-test -n "$FAIL" || \
-perl perl/cvslogin.pl work/merge.xml
-
test -z "$FAIL" || echo "*** FAILED ***"
1.5 +101 -4 jakarta-alexandria/proposal/gump/java/Module.java
Index: Module.java
===================================================================
RCS file: /home/cvs/jakarta-alexandria/proposal/gump/java/Module.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Module.java 2001/10/07 12:16:00 1.4
+++ Module.java 2001/10/07 21:16:30 1.5
@@ -3,17 +3,44 @@
import org.w3c.dom.Node;
// Java classes
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.PrintWriter;
import java.util.Enumeration;
-import java.util.Vector;
import java.util.Hashtable;
+import java.util.Vector;
public class Module {
static private Hashtable modules = new Hashtable();
private Element element;
+ private Element cvs;
private String name;
private String srcdir;
+ private static String cvspass = System.getProperty("user.home")+"/.cvspass";
+
+ /** cvspass char conversion data */
+ private static final char shifts[] = {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 114,120, 53, 79, 96,109, 72,108, 70, 64, 76, 67,116, 74, 68, 87,
+ 111, 52, 75,119, 49, 34, 82, 81, 95, 65,112, 86,118,110,122,105,
+ 41, 57, 83, 43, 46,102, 40, 89, 38,103, 45, 50, 42,123, 91, 35,
+ 125, 55, 54, 66,124,126, 59, 47, 92, 71,115, 78, 88,107,106, 56,
+ 36,121,117,104,101,100, 69, 73, 99, 63, 94, 93, 39, 37, 61, 48,
+ 58,113, 32, 90, 44, 98, 60, 51, 33, 97, 62, 77, 84, 80, 85,223,
+ 225,216,187,166,229,189,222,188,141,249,148,200,184,136,248,190,
+ 199,170,181,204,138,232,218,183,255,234,220,247,213,203,226,193,
+ 174,172,228,252,217,201,131,230,197,211,145,238,161,179,160,212,
+ 207,221,254,173,202,146,224,151,140,196,205,130,135,133,143,246,
+ 192,159,244,239,185,168,215,144,139,165,180,157,147,186,214,176,
+ 227,231,219,169,175,156,206,198,129,164,150,210,154,177,134,127,
+ 182,128,158,208,162,132,167,209,149,241,153,251,237,236,171,195,
+ 243,233,253,240,194,250,191,155,142,137,245,235,163,242,178,152 };
+
/**
* Create a set of Module definitions based on XML nodes.
* @param moudules list of <module> elements
@@ -22,6 +49,8 @@
while (modules.hasMoreElements()) {
new Module((Element)modules.nextElement());
}
+
+ cvslogin();
}
/**
@@ -100,15 +129,24 @@
}
/**
- * Resolves a repository name into a cvsroot. In the process it also
- * decorates the cvs tag with the module name and tag info.
+ * Resolves a repository name into a cvsroot. If there are multiple
+ * cvs entries, first they are combined into a single elemnt. Then
+ * the single resulting element (if any) will get decorated with the
+ * the module name, cvsroot, and password info.
*/
private void resolveCvsroot() throws Exception {
Node child=element.getFirstChild();
for (; child != null; child=child.getNextSibling()) {
if (! child.getNodeName().equals("cvs")) continue;
- Element cvs = (Element) child;
+ if (cvs == null) {
+ cvs = (Element) child;
+ } else {
+ Jenny.copyChildren((Element) child, cvs);
+ }
+
+ }
+ if (cvs != null) {
cvs.setAttribute("srcdir", name);
if (cvs.getAttributeNode("module") == null) {
cvs.setAttribute("module", name);
@@ -134,4 +172,63 @@
cvs.setAttribute("password", r.get("password"));
}
}
+
+
+ /**
+ * Add entries to cvspass, as necessary, to simulate logon to
+ * cvs repositories accessed as :pserver:. Note: the .cvspass file
+ * will not be updated unless there are new entries to add.
+ */
+ private static void cvslogin() throws Exception {
+
+ Hashtable password = new Hashtable();
+ File file = new File(cvspass);
+
+ // read existing cvsroot entries
+
+ if (file.exists()) {
+ BufferedReader reader = new BufferedReader(new FileReader(file));
+
+ for (String line = null; (line=reader.readLine())!=null; ) {
+ int split = line.indexOf(' ');
+ password.put(line.substring(0,split), line.substring(split+1));
+ }
+
+ reader.close();
+ }
+
+ // append new entries
+
+ PrintWriter writer = null;
+
+ for (Enumeration e=modules.elements(); e.hasMoreElements(); ) {
+ Element cvs = ((Module) e.nextElement()).cvs;
+ if (cvs == null) continue;
+
+ String cvsroot = cvs.getAttribute("cvsroot");
+ if (!cvsroot.startsWith(":pserver:")) continue;
+
+ if (password.get(cvsroot) == null) {
+ if (writer == null) {
+ writer = new PrintWriter(new FileWriter(cvspass, true));
+ }
+ String data = mangle(cvs.getAttribute("password"));
+ writer.println(cvsroot + " " + data);
+ }
+ }
+
+ if (writer != null) writer.close();
+ }
+
+ /**
+ * Encode a password using the same encryption scheme that cvs uses.
+ */
+ private static String mangle(String password){
+ char[] buf = password.toCharArray();
+ for(int i=0; i<buf.length; i++) {
+ buf[i] = shifts[buf[i]];
+ }
+ return new String(buf);
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]