[Anthill] Subversion support for Anthill OS
Jim Hague
jim.hague at acm.org
Wed Feb 25 07:29:48 CST 2004
I tried Anthill OS 1.6.3.67 out a few weeks ago against CVS. It's a nice tool -
much appreciation to all. Does just what I want.
For reasons that will become obvious in a moment, I then tried out current CVS.
I had a problem with class files getting corrupted (building on Linux - Debian
stable & unstable). The following seems to sort it:
===================================================================
RCS file: /usr/local/cvs/Anthill/build/build.xml,v
retrieving revision 1.26
diff -u -r1.26 build.xml
--- build/build.xml 2003/04/30 19:06:08 1.26
+++ build/build.xml 2004/02/25 13:40:38
@@ -137,8 +137,9 @@
<fixcrlf srcdir="${conf.profile.dir}/Unix/unix_cvs" />
<fixcrlf srcdir="${conf.profile.dir}/Unix/unix_perforce" />
<fixcrlf srcdir="${conf.profile.dir}/Unix/unix_pvcs" />
+ <fixcrlf srcdir="${conf.profile.dir}/Unix/unix_subversion" />
<fixcrlf srcdir="${conf.profile.dir}/Unix/unix_vss" />
- <fixcrlf srcdir="${build.dir}" excludes="**/CVS" />
+ <fixcrlf srcdir="${build.dir}" excludes="**/CVS **/*.class" />
</target>
</project>
===================================================================
I then went and coverted our repository to Subversion. Which left an itch to be
scratched. Anyone reading the above patch closely will have guessed that I've
been scratching it.
So, attached for anyone that might be interested, is my initial attempt at
adding Subversion support to Anthill OS. The patch is against current CVS. It's
a work in progress - I haven't even tried the tagging code or building a
specific revision, for example - but it Works For Me building my main project
with Subversion 0.37. Documentation is lacking too. This is strictly 'chuck it
over the wall and see if anyone's interested' at present.
Obviously I'm new to Anthill, so please be patient if I've grossly
misunderstood how it all is supposed to work.
--
Jim Hague - jim.hague at acm.org Never trust a computer you can't lift.
-------------- next part --------------
diff -Naur -x CVS Anthill-urbancode/source/main/java/com/urbancode/anthill/adapt
er/ChangesetRevision.java Anthill/source/main/java/com/urbancode/anthill/adapter
/ChangesetRevision.java
--- Anthill-urbancode/source/main/java/com/urbancode/anthill/adapter/ChangesetRe
vision.java 1970-01-01 01:00:00.000000000 +0100
+++ Anthill/source/main/java/com/urbancode/anthill/adapter/ChangesetRevision.jav
a 2004-02-25 13:21:07.000000000 +0000
@@ -0,0 +1,160 @@
+/*
+ * ChangesetRevision.java
+ *
+ * Created on February 23rd 2004.
+ */
+
+package com.urbancode.anthill.adapter;
+
+import org.apache.log4j.Category;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.Vector;
+import java.text.DateFormat;
+
+/**
+ * The Revision class assumes a SCM that is file-change based. This
+ * doesn't really fit too well with more modern SCM that are changeset
+ * based. The changeset consists of a comment about the changeset and
+ * a list of the files in that changeset. Yes, you can create a
+ * file-based changeset from that but unless your SCM supports
+ * per-file comments and your users make fully use of that then the
+ * changelog is going to look a bit silly; a list of filenames all
+ * with the same comment. Urgh.
+ * <p>
+ * So this class implements a more Changeset-friendly revision. It
+ * doesn't handle per-file comments in addition to the changeset
+ * comment at the moment, because I'm scratching a Subversion itch,
+ * and Subversion doesn't have per-file comments.
+ *
+ * @author Jim Hague, <jim.hague at acm.org>
+ */
+public class ChangesetRevision
+ extends Revision
+{
+ // Create Log4j category instance for logging
+ static private Category log = Category.getInstance(ChangesetRevision.class.
getName());
+
+ // Date format used for the revision date. Living on the
+ // right-hand side of the pond I can't stomach MM/dd/yy, but let's
+ // try being ecumenical and use something Java thinks is locale
+ // friendly. That'll be server locale, of course.
+ private static final DateFormat DATE_FORMAT =
+ DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM);
+
+ // 'userName', 'date' and 'comment' fields are inherited from Revision.
+ public String changeId;
+
+ // Vectors of Revisions for files added, delted, modified or replaced.
+ public Vector filesAdded = new Vector();
+ public Vector filesDeleted = new Vector();
+ public Vector filesModified = new Vector();
+ public Vector filesReplaced = new Vector();
+
+ /**
+ * Build an empty revision.
+ */
+ public ChangesetRevision()
+ {
+ }
+
+ /**
+ * Build a revision with the given initial settings.
+ */
+ public ChangesetRevision(String changeId, String user, Date date)
+ {
+ this.changeId = changeId;
+ this.userName = user;
+ this.date = date;
+ }
+
+ /**
+ * Add a Revision for an added file.
+ */
+ public void addAddedFile(Revision r)
+ {
+ filesAdded.add(r);
+ }
+
+ /**
+ * Add a Revision for a deleted file.
+ */
+ public void addDeletedFile(Revision r)
+ {
+ filesDeleted.add(r);
+ }
+
+ /**
+ * Add a Revision for a modified file.
+ */
+ public void addModifiedFile(Revision r)
+ {
+ filesModified.add(r);
+ }
+
+ /**
+ * Add a Revision for a replaced file.
+ */
+ public void addReplacedFile(Revision r)
+ {
+ filesReplaced.add(r);
+ }
+
+ public String toString()
+ {
+ // The output is as follows:
+ //
+ // Change ID user date
+ //
+ // Added files:
+ // foo/bar/seagoon.java
+ // Deleted files:
+ // foo/bar/bloodnok.java
+ // Modified files:
+ // foo/bar/eccles.java
+ // Replaced files:
+ // foo/bar/bluebottle.java
+ //
+ // Comment line 1
+ // Comment line 2
+ // etc.
+ StringBuffer buf = new StringBuffer();
+
+ buf.append(changeId);
+ buf.append("\t");
+ buf.append(userName);
+ buf.append("\t");
+ buf.append(DATE_FORMAT.format(date));
+ buf.append("\n\n");
+
+ addFilesToBuf(buf, filesAdded, "Added files");
+ addFilesToBuf(buf, filesDeleted, "Deleted files");
+ addFilesToBuf(buf, filesModified, "Modified files");
+ addFilesToBuf(buf, filesReplaced, "Replaced files");
+
+ buf.append(comment.trim());
+ buf.append("\n");
+
+ return buf.toString();
+ }
+
+ private void addFilesToBuf(StringBuffer buf, Vector files, String title)
+ {
+ if ( files.isEmpty() )
+ return;
+
+ buf.append(title);
+ buf.append(":\n");
+ for (Enumeration e = files.elements() ; e.hasMoreElements() ;)
+ {
+ Revision r = (Revision) e.nextElement();
+
+ buf.append("\t");
+ buf.append(r.fileName);
+ buf.append("\n");
+ }
+
+ buf.append("\n");
+ }
+}
+
diff -Naur -x CVS Anthill-urbancode/source/main/java/com/urbancode/anthill/adapt
er/SubversionRepositoryAdapter.java Anthill/source/main/java/com/urbancode/anthi
ll/adapter/SubversionRepositoryAdapter.java
--- Anthill-urbancode/source/main/java/com/urbancode/anthill/adapter/SubversionR
epositoryAdapter.java 1970-01-01 01:00:00.000000000 +0100
+++ Anthill/source/main/java/com/urbancode/anthill/adapter/SubversionRepositoryA
dapter.java 2004-02-25 11:24:01.000000000 +0000
@@ -0,0 +1,290 @@
+/*
+ * SubversionRepositoryAdapter.java
+ *
+ * Created on February 23rd 2004
+ */
+package com.urbancode.anthill.adapter;
+
+import org.apache.log4j.Category;
+import com.urbancode.anthill.util.Execute;
+import com.urbancode.anthill.util.StreamPumper;
+import com.urbancode.anthill.AnthillProject;
+import com.urbancode.anthill.ProjectProperties;
+import com.urbancode.anthill.BuildDefinition;
+import com.urbancode.anthill.util.FileRemover;
+import java.io.*;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.StringTokenizer;
+import java.util.Iterator;
+import java.util.TimeZone;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Vector;
+import com.urbancode.pagelet.*;
+import org.apache.regexp.*;
+
+/**
+ * <p>
+ * An implementation of <code>RepositoryAdapter</code> that interfaces with
+ * a command-line Subversion client to work with a Subversion repository.</p>
+ * <p>
+ * The following extra properties must be specified for this adapter in the
+ * .anthill file:
+ * <ul>
+ * <li>SVN_URL - the URL pointing to the repository.
+ * <li>SVN_USER - access the repository with this username
+ * <li>SVN_PASS - access the repository with this password
+ * </ul></p>
+ *
+ * @author Jim Hague <jim.hague at acm.org>
+ */
+public class SubversionRepositoryAdapter extends ProfileRepositoryAdapter {
+
+ //*************************************************************************
*
+ // CLASS
+ //*************************************************************************
+
+ // Create Log4j category instance for logging
+ static private Category log = Category.getInstance(SubversionRepositoryAdap
ter.class.getName());
+ // Create Log4j category instance for logging
+ static private Category streamLog = Category.getInstance(SubversionReposito
ryAdapter.class.getName()+"Stream");
+ // CVS project property key
+
+ static public final String ADAPTER_SUFFIX = "subversion";
+
+ static protected final String GET_REVISIONS_SINCE_PAGELET = "getRevisionsSi
nce.pgl";
+ static protected final String COMMAND_INIT = "getCommandInit.pgl";
+
+ // The various property keys
+ static public final String WORK_DIR_KEY = "repository.subversion.work.dir";
+ static public final String URL_KEY = "repository.subversion.url";
+ static public final String TAGS_URL_KEY = "repository.subversion.tags.url";
+ static public final String USER_KEY = "repository.subversion.anthill.user";
+ static public final String PASSWORD_KEY = "repository.subversion.anthill.pa
ssword";
+
+ // The comment for build increment commits.
+ public static final String BUILD_INCREMENT_COMMENT = "Anthill: Increment bu
ild number";
+
+ // date format understood by Subversion commands
+ public static SimpleDateFormat SUBVERSION_DATE = new SimpleDateFormat("yyyy
-MM-dd HH:mm:ss ZZZZZ");
+
+ // The file delimiting token in log output.
+ private static final String REV_DELIM_TOKEN = "----------------------------
--------------------------------------------";
+
+ private static final String NEW_LINE = System.getProperty("line.separator")
;
+
+ /**
+ * Create a new SubversionRepositoryAdapter
+ */
+ public SubversionRepositoryAdapter() {
+ }
+
+ public String getAdapterSuffix() {
+ return ADAPTER_SUFFIX;
+ }
+
+ protected void calculateRepositoryProperties()
+ throws RepositoryException {
+ // calculate the work directory, and local project directory
+ calculateWorkDirName(WORK_DIR_KEY);
+ localProjectDirName = workDirName;
+ }
+
+ /**
+ * Returns a List of Revision objects detailing the changes that have
+ * been made since the specified date.
+ * <p>
+ * It isn't particularly simple to get per-file change info out of
+ * Subversion. So to keep things simple for the moment, don't
+ * try. Subvert a Revision object to describe a Subversion
+ * revision. Set the revision number in the filename and put the
+ * log output into the comment. If the comment is the same as the
+ * build number auto-commit commit, assume the revision is the
+ * build increment revision and ignore it.
+ *
+ * @param Date
+ * @return List.
+ */
+ public List getRevisionsSince(Date date)
+ throws RepositoryException {
+
+ Process p = null;
+ StreamPumper errorPumper = null;
+ int exitcode = 0;
+ List revisionList = new ArrayList();
+ try {
+ Map tempMap = new HashMap();
+ tempMap.put("Adapter", this);
+ tempMap.put("Properties", project.getProperties());
+ tempMap.put("Date", date);
+ Pagelet pagelet = getPageletFactory().getPagelet(makeProfilePagelet
Name(GET_REVISIONS_SINCE_PAGELET));
+ String commandString = pagelet.service(tempMap);
+ log.info("Get revisions since command: " + commandString);
+ p = Runtime.getRuntime().exec(toArray(commandString));
+
+ // pump the error stream.
+ errorPumper = new StreamPumper(p.getErrorStream(), "getRevisions",
+ System.err, true);
+ errorPumper.start();
+
+ // get and parse the input stream
+ InputStream input = p.getInputStream();
+ parseLogCommandResult(input, revisionList);
+
+ exitcode = p.waitFor();
+
+ }
+ catch (Exception e) {
+ log.error(e.getMessage() + " thrown in new catch");
+ e.printStackTrace();
+ throw new RepositoryException(e.getMessage());
+ }
+ finally {
+ if (errorPumper != null) {
+ try {
+ errorPumper.join();
+ } catch (InterruptedException e) {
+ throw new RepositoryException(e);
+ }
+ }
+ }
+
+ // handle errors
+ if (exitcode != 0) {
+ throw (new RepositoryException("svn log failed. Exit code: " + exi
tcode));
+ }
+ log.debug("returning revisionList");
+ return revisionList;
+ }
+
+ protected void parseLogCommandResult(InputStream in, List revList)
+ throws IOException, RepositoryException {
+ final int PARSE_REV_START = 1;
+ final int PARSE_REV_FILELIST = 2;
+ final int PARSE_REV_COMMENT = 3;
+
+ BufferedReader br = new BufferedReader(new InputStreamReader(in));
+ ChangesetRevision rev = null;
+ StringBuffer comment = new StringBuffer();
+ RE headerRE = null;
+ RE fileRE = null;
+ int parseState = PARSE_REV_START;
+
+ try
+ {
+ headerRE = new RE("^r(\\d+) \\| (\\S+) \\| ([^\\(]+)");
+ fileRE = new RE("^ ([ADMR]) /(\\S+)");
+ }
+ catch (RESyntaxException rse)
+ {
+ log.error(rse);
+ throw new RepositoryException(rse);
+ }
+
+ for ( String line = br.readLine(); line != null; line = br.readLine() )
+ {
+ switch (parseState)
+ {
+ case PARSE_REV_START:
+ // Just look out for lines matching the header.
+ if ( headerRE.match(line) )
+ {
+ try
+ {
+ String revId = headerRE.getParen(1);
+ String user = headerRE.getParen(2);
+ Date date = SUBVERSION_DATE.parse(headerRE.getParen(3));
+
+ rev = new ChangesetRevision("Revision " + revId,
+ user, date);
+
+ log.debug("RevID: " + revId);
+ log.debug("User: " + user);
+ log.debug("Date: " + rev.date);
+ }
+ catch (ParseException pe)
+ {
+ log.warn(pe);
+ }
+ parseState = PARSE_REV_FILELIST;
+ }
+ break;
+
+ case PARSE_REV_FILELIST:
+ // Grab all file info lines, ignoring any that doesn't
+ // match their pattern. The end of this section is
+ // indicated by a blank line.
+ if ( fileRE.match(line) )
+ {
+ char ftype = fileRE.getParen(1).charAt(0);
+ Revision filerev = new Revision();
+
+ filerev.fileName = fileRE.getParen(2);
+ switch(ftype)
+ {
+ case 'A':
+ rev.addAddedFile(filerev);
+ break;
+
+ case 'D':
+ rev.addDeletedFile(filerev);
+ break;
+
+ case 'M':
+ rev.addModifiedFile(filerev);
+ break;
+
+ case 'R':
+ rev.addReplacedFile(filerev);
+ break;
+ }
+ }
+ else if (line.trim().length() == 0 )
+ parseState = PARSE_REV_COMMENT;
+ break;
+
+ case PARSE_REV_COMMENT:
+ // Everything is a comment line up to the delimiter line.
+ if ( line.startsWith(REV_DELIM_TOKEN ) )
+ {
+ // End of revision info. Add the current revision
+ // provided that the revision is not a build
+ // version increment.
+ if ( comment.lastIndexOf(BUILD_INCREMENT_COMMENT) < 0 )
+ {
+ rev.comment = comment.toString();
+ revList.add(rev);
+ }
+
+ // Empty the comment buffer and reset the revision
+ // info for the next one.
+ comment.setLength(0);
+ rev = null;
+
+ parseState = PARSE_REV_START;
+ continue;
+ }
+ else
+ {
+ // Otherwise it's a comment line.
+ comment.append(line);
+ comment.append(NEW_LINE);
+ }
+ break;
+ }
+ }
+ }
+
+ /**
+ * Subversion doesn't at present have any pre-edit that needs
+ * doing as far as I can see.
+ *
+ * @param file file to prepare for editing
+ */
+ public void prepareFileForEdit(String file) throws RepositoryException {
+ }
+}
diff -Naur -x CVS Anthill-urbancode/source/main/profiles/Unix/unix_subversion/ge
tRevisionsSince.pgl Anthill/source/main/profiles/Unix/unix_subversion/getRevisio
nsSince.pgl
--- Anthill-urbancode/source/main/profiles/Unix/unix_subversion/getRevisionsSinc
e.pgl 1970-01-01 01:00:00.000000000 +0100
+++ Anthill/source/main/profiles/Unix/unix_subversion/getRevisionsSince.pgl 2004
-02-25 12:25:45.000000000 +0000
@@ -0,0 +1,39 @@
+<%@ import="com.urbancode.anthill.ProjectProperties" %>
+<%@ import="com.urbancode.anthill.adapter.*" %>
+<%@ import="com.urbancode.anthill.Anthill" %>
+<%
+Anthill anthill = Anthill.getAnthill();
+
+ProjectProperties pp = (ProjectProperties)context.get("Properties");
+SubversionRepositoryAdapter ra = (SubversionRepositoryAdapter)context.get("Adap
ter");
+
+Date date = (Date)context.get("Date");
+String url = pp.getProperty(SubversionRepositoryAdapter.URL_KEY);
+String user = pp.getProperty(SubversionRepositoryAdapter.USER_KEY).trim();
+String password = pp.getProperty(SubversionRepositoryAdapter.PASSWORD_KEY).trim
();
+String pageletDir = anthill.getAnthillRootDir().getAbsolutePath() +
+ File.separator + "conf" +
+ File.separator + "profiles"+ File.separator + "Unix" +
+ File.separator + "unix_subversion" + File.separator;
+
+String version = (String)context.get("Version");
+
+String authArgs = "";
+
+if ( user.length() > 0 )
+{
+ authArgs = "--username \"" + user + "\" --password \"" + password + "\"";
+}
+
+String revString = "";
+
+if ( version != null && !version.trim().equals("") ) {
+ revString = "-r " + version;
+} else if (date != null) {
+ String dateConstraint = "{" + ra.SUBVERSION_DATE.format(date) + "}:HEAD";
+ revString = "-r \"" + dateConstraint + "\"";
+}
+
+%>
+
+sh <%=pageletDir%>getRevisionsSince.sh <%=authArgs%> <%=revString%> <%=url%>
diff -Naur -x CVS Anthill-urbancode/source/main/profiles/Unix/unix_subversion/ge
tRevisionsSince.sh Anthill/source/main/profiles/Unix/unix_subversion/getRevision
sSince.sh
--- Anthill-urbancode/source/main/profiles/Unix/unix_subversion/getRevisionsSinc
e.sh 1970-01-01 01:00:00.000000000 +0100
+++ Anthill/source/main/profiles/Unix/unix_subversion/getRevisionsSince.sh 2004-
02-25 12:25:45.000000000 +0000
@@ -0,0 +1,4 @@
+#!/bin/bash
+echo "Executing: svn log --non-interactive $@"
+svn log --non-interactive -v "$@"
+
diff -Naur -x CVS Anthill-urbancode/source/main/profiles/Unix/unix_subversion/ge
tWorkingProject.pgl Anthill/source/main/profiles/Unix/unix_subversion/getWorking
Project.pgl
--- Anthill-urbancode/source/main/profiles/Unix/unix_subversion/getWorkingProjec
t.pgl 1970-01-01 01:00:00.000000000 +0100
+++ Anthill/source/main/profiles/Unix/unix_subversion/getWorkingProject.pgl 2004
-02-25 12:25:45.000000000 +0000
@@ -0,0 +1,42 @@
+<%@ import="com.urbancode.anthill.ProjectProperties" %>
+<%@ import="com.urbancode.anthill.adapter.*" %>
+<%@ import="com.urbancode.anthill.Anthill" %>
+<%
+Anthill anthill = Anthill.getAnthill();
+
+ProjectProperties pp = (ProjectProperties)context.get("Properties");
+ProfileRepositoryAdapter ra = (ProfileRepositoryAdapter)context.get("Adapter");
+
+String url = pp.getProperty(SubversionRepositoryAdapter.URL_KEY);
+String user = pp.getProperty(SubversionRepositoryAdapter.USER_KEY).trim();
+String password = pp.getProperty(SubversionRepositoryAdapter.PASSWORD_KEY).trim
();
+String workDirectory = anthill.getAnthillRootDir().getAbsolutePath() +
+ File.separator + pp.getProperty(SubversionRepositoryAdap
ter.WORK_DIR_KEY);
+String pageletDir = anthill.getAnthillRootDir().getAbsolutePath() +
+ File.separator + "conf" +
+ File.separator + "profiles"+ File.separator + "Unix" +
+ File.separator + "unix_subversion" + File.separator;
+
+String version = (String)context.get("Version");
+
+String authArgs = "";
+
+if ( user.length() > 0 )
+{
+ authArgs = "--username \"" + user + "\" --password \"" + password + "\"";
+}
+
+String revString = "";
+
+if ( version != null && !version.trim().equals("") ) {
+ revString = "-r " + version;
+}
+
+File workFile = new File(workDirectory);
+if (!workFile.exists()) {
+ workFile.mkdirs();
+}
+workDirectory = workFile.getAbsolutePath();
+%>
+
+sh <%=pageletDir%>getWorkingProject.sh <%=authArgs%> <%=revString%> <%=url%> <%
=workDirectory%>
diff -Naur -x CVS Anthill-urbancode/source/main/profiles/Unix/unix_subversion/ge
tWorkingProject.sh Anthill/source/main/profiles/Unix/unix_subversion/getWorkingP
roject.sh
--- Anthill-urbancode/source/main/profiles/Unix/unix_subversion/getWorkingProjec
t.sh 1970-01-01 01:00:00.000000000 +0100
+++ Anthill/source/main/profiles/Unix/unix_subversion/getWorkingProject.sh 2004-
02-25 12:25:45.000000000 +0000
@@ -0,0 +1,3 @@
+#!/bin/sh
+echo "Executing: svn checkout --non-interactive $@"
+svn checkout --non-interactive "$@"
diff -Naur -x CVS Anthill-urbancode/source/main/profiles/Unix/unix_subversion/la
bel.pgl Anthill/source/main/profiles/Unix/unix_subversion/label.pgl
--- Anthill-urbancode/source/main/profiles/Unix/unix_subversion/label.pgl 1970-0
1-01 01:00:00.000000000 +0100
+++ Anthill/source/main/profiles/Unix/unix_subversion/label.pgl 2004-02-25 12:25
:45.000000000 +0000
@@ -0,0 +1,32 @@
+<%@ import="com.urbancode.anthill.adapter.*" %>
+<%@ import="com.urbancode.anthill.ProjectProperties" %>
+<%@ import="com.urbancode.anthill.Anthill" %>
+<%
+Anthill anthill = Anthill.getAnthill();
+
+ProfileRepositoryAdapter ra = (ProfileRepositoryAdapter)context.get("Adapter");
+ProjectProperties pp = (ProjectProperties)context.get("Properties");
+String tag = (String)context.get("Tag");
+String url = pp.getProperty(SubversionRepositoryAdapter.URL_KEY);
+String tagUrl = pp.getProperty(SubversionRepositoryAdapter.TAGS_URL_KEY);
+String user = pp.getProperty(SubversionRepositoryAdapter.USER_KEY).trim();
+String password = pp.getProperty(SubversionRepositoryAdapter.PASSWORD_KEY).trim
();
+String pageletDir = anthill.getAnthillRootDir().getAbsolutePath() +
+ File.separator + "conf" +
+ File.separator + "profiles"+ File.separator + "Unix" +
+ File.separator + "unix_subversion" + File.separator;
+
+if (!tagUrl.endsWith("/"))
+ tagUrl.concat("/");
+tagUrl.concat(tag);
+
+String authArgs = "";
+
+if ( user.length() > 0 )
+{
+ authArgs = "--username \"" + user + "\" --password \"" + password + "\"";
+}
+
+%>
+
+sh <%=pageletDir%>label.sh <%=authArgs%> <%=url%> <%=tagUrl%>
diff -Naur -x CVS Anthill-urbancode/source/main/profiles/Unix/unix_subversion/la
bel.sh Anthill/source/main/profiles/Unix/unix_subversion/label.sh
--- Anthill-urbancode/source/main/profiles/Unix/unix_subversion/label.sh 1970-01
-01 01:00:00.000000000 +0100
+++ Anthill/source/main/profiles/Unix/unix_subversion/label.sh 2004-02-25 12:25:
45.000000000 +0000
@@ -0,0 +1,3 @@
+#!/bin/bash
+echo "Executing: svn copy $@"
+svn copy --non-interactive "$@"
diff -Naur -x CVS Anthill-urbancode/source/main/profiles/Unix/unix_subversion/po
stEditPagelet.pgl Anthill/source/main/profiles/Unix/unix_subversion/postEditPage
let.pgl
--- Anthill-urbancode/source/main/profiles/Unix/unix_subversion/postEditPagelet.
pgl 1970-01-01 01:00:00.000000000 +0100
+++ Anthill/source/main/profiles/Unix/unix_subversion/postEditPagelet.pgl 2004-0
2-25 12:25:45.000000000 +0000
@@ -0,0 +1,32 @@
+<%@ import="com.urbancode.anthill.adapter.*" %>
+<%@ import="com.urbancode.anthill.ProjectProperties" %>
+<%@ import="com.urbancode.anthill.Anthill" %>
+<%
+Anthill anthill = Anthill.getAnthill();
+
+ProfileRepositoryAdapter ra = (ProfileRepositoryAdapter)context.get("Adapter");
+ProjectProperties pp = (ProjectProperties)context.get("Properties");
+String postEditFile = (String)context.get("File");
+String user = pp.getProperty(SubversionRepositoryAdapter.USER_KEY).trim();
+String password = pp.getProperty(SubversionRepositoryAdapter.PASSWORD_KEY).trim
();
+String pageletDir = anthill.getAnthillRootDir().getAbsolutePath() +
+ File.separator + "conf" +
+ File.separator + "profiles"+ File.separator + "Unix" +
+ File.separator + "unix_subversion" + File.separator;
+
+String workDirectory = anthill.getAnthillRootDir().getAbsolutePath() +
+ File.separator + pp.getProperty(SubversionRepositoryAdap
ter.WORK_DIR_KEY);
+
+postEditFile = workDirectory + File.separator + postEditFile;
+
+String authArgs = "";
+
+if ( user.length() > 0 )
+{
+ authArgs = "--username \"" + user + "\" --password \"" + password + "\"";
+}
+
+String msg = "-m \"" + SubversionRepositoryAdapter.BUILD_INCREMENT_COMMENT + "\
"";
+
+%>
+sh <%=pageletDir%>postEditPagelet.sh <%=authArgs%> <%=msg%> <%=postEditFile%>
diff -Naur -x CVS Anthill-urbancode/source/main/profiles/Unix/unix_subversion/po
stEditPagelet.sh Anthill/source/main/profiles/Unix/unix_subversion/postEditPagel
et.sh
--- Anthill-urbancode/source/main/profiles/Unix/unix_subversion/postEditPagelet.
sh 1970-01-01 01:00:00.000000000 +0100
+++ Anthill/source/main/profiles/Unix/unix_subversion/postEditPagelet.sh 2004-02
-25 12:25:45.000000000 +0000
@@ -0,0 +1,3 @@
+#!/bin/bash
+echo "Executing: svn $@"
+svn commit --non-interactive "$@"
More information about the Anthill
mailing list