package bluej.groupwork.svn;

import java.io.File;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;

import org.tigris.subversion.javahl.ChangePath;
import org.tigris.subversion.javahl.ClientException;
import org.tigris.subversion.javahl.LogDate;
import org.tigris.subversion.javahl.LogMessageCallback;
import org.tigris.subversion.javahl.Revision;
import org.tigris.subversion.javahl.RevisionRange;
import org.tigris.subversion.javahl.SVNClientInterface;

import bluej.groupwork.HistoryInfo;
import bluej.groupwork.LogHistoryListener;
import bluej.groupwork.TeamworkCommandAborted;
import bluej.groupwork.TeamworkCommandError;
import bluej.groupwork.TeamworkCommandResult;


| A subversion history command. | | @author Davin McCall | public class SvnHistoryCommand extends SvnCommand{ private LogHistoryListener listener; public SvnHistoryCommand(SvnRepository repository, LogHistoryListener listener) { super(repository); this.listener = listener; } protected TeamworkCommandResult doCommand() { SVNClientInterface client = getClient(); File projectPath = getRepository().getProjectPath(); try { RevisionRange rr = new RevisionRange(Revision.START, Revision.HEAD); client.logMessages(projectPath.getAbsolutePath(), Revision.HEAD, new RevisionRange[] {rr }, false | don't stopOnCopy | true | do discoverPath | false | don't includeMergedRevisions | new String[] {"svn:author", "svn:date", "svn:log"}, 0 | give us all commits | new LogMessageCallback() { @Override public void singleMessage(ChangePath[] paths, long revision, Map revProps, boolean hasChildren) { if (paths.length == 0) { return; } String revisionStr = Long.toString(revision); Object ldate = revProps.get("svn:date"); try { Date theDate = new LogDate(ldate.toString()).getDate(); String date = ""; Calendar calendar = Calendar.getInstance(); calendar.setTime(theDate); date += padInt(calendar.get(Calendar.YEAR), 4); date += "/" + padInt(calendar.get(Calendar.MONTH) + 1, 2); date += "/" + padInt(calendar.get(Calendar.DAY_OF_MONTH), 2); date += " " + padInt(calendar.get(Calendar.HOUR_OF_DAY), 2); date += ":" + padInt(calendar.get(Calendar.MINUTE), 2); date += ":" + padInt(calendar.get(Calendar.SECOND), 2); String [] strPaths = new String[paths.length]; for (int j = 0; j < paths.length; j++) { strPaths[j] = paths[j].getPath(); int index = strPaths[j].indexOf(File.separator, 1); if (index != -1) { strPaths[j] = strPaths[j].substring(index + 1); } else { strPaths[j] = strPaths[j].substring(1); } } String author = revProps.get("svn:author").toString(); String message = revProps.get("svn:log").toString(); HistoryInfo info = new HistoryInfo(strPaths, revisionStr, date, author, message); listener.logInfoAvailable(info); } catch (ParseException pe) { } } }); return new TeamworkCommandResult(); } catch (ClientException ce) { if (! isCancelled()) { return new TeamworkCommandError(ce.getMessage(), ce.getLocalizedMessage()); } } return new TeamworkCommandAborted(); }
| Pad an integer to the given number of digits (using leading noughts). | private static String padInt(int number, int digits) { String result = Integer.toString(number); while (result.length() < digits){ result = "0" + result; } return result; } }
top, use, map, class SvnHistoryCommand

.   SvnHistoryCommand
.   doCommand
.   singleMessage
.   padInt




155 neLoCode + 7 LoComm