Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Mergeinfo.java view on Meta::CPAN
// http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf
// http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/version.html#6678
// http://java.sun.com/javase/6/docs/platform/serialization/spec/version.html#6678
private static final long serialVersionUID = 1L;
/**
* A mapping of repository-relative paths to a list of revision
* ranges.
*/
private Map<String, List<RevisionRange>> mergeSources;
public Mergeinfo()
{
mergeSources = new HashMap<String, List<RevisionRange>>();
}
/**
* Create and populate an instance using the contents of the
* <code>svn:mergeinfo</code> property.
* @param mergeinfo <code>svn:mergeinfo</code> property value.
*/
public Mergeinfo(String mergeinfo)
{
this();
this.loadFromMergeinfoProperty(mergeinfo);
}
/**
* A constructor for backward compat.
*/
public Mergeinfo(org.apache.subversion.javahl.types.Mergeinfo aMergeinfo)
{
this();
Set<String> srcPaths = aMergeinfo.getPaths();
for (String srcPath : srcPaths)
{
List<org.apache.subversion.javahl.types.RevisionRange> aRanges =
aMergeinfo.getRevisionRange(srcPath);
List<RevisionRange> list = new ArrayList<RevisionRange>();
for (org.apache.subversion.javahl.types.RevisionRange range : aRanges)
{
list.add(new RevisionRange(range));
}
mergeSources.put(srcPath, list);
}
}
/**
* Add one or more RevisionRange objects to merge info. If the
* merge source is already stored, the list of revisions is
* replaced.
* @param mergeSrc The merge source URL.
* @param ranges RevisionRange objects to add.
* @throws SubversionException If range list contains objects of
* type other than RevisionRange.
*/
public void addRevisions(String mergeSrc, RevisionRange[] ranges)
{
for (int i = 0; i < ranges.length; i++)
addRevisionRange(mergeSrc, ranges[i]);
}
/**
* Add a revision range to the merged revisions for a path. If
* the merge source already has associated revision ranges, add
* the revision range to the existing list.
* @param mergeSrc The merge source URL.
* @param range The revision range to add.
*/
public void addRevisionRange(String mergeSrc, RevisionRange range)
{
List<RevisionRange> revisions = this.getRevisions(mergeSrc);
if (revisions == null)
revisions = new ArrayList<RevisionRange>();
revisions.add(range);
this.setRevisionList(mergeSrc, revisions);
}
/**
* Get the merge source URLs.
* @return The merge source URLs.
*/
public String[] getPaths()
{
Set<String> pathSet = mergeSources.keySet();
if (pathSet == null)
return null;
return pathSet.toArray(new String[pathSet.size()]);
}
/**
* Get the revision ranges for the specified merge source URL.
* @param mergeSrc The merge source URL, or <code>null</code>.
* @return List of RevisionRange objects, or <code>null</code>.
*/
public List<RevisionRange> getRevisions(String mergeSrc)
{
if (mergeSrc == null)
return null;
return mergeSources.get(mergeSrc);
}
/**
* Get the RevisionRange objects for the specified merge source URL
* @param mergeSrc The merge source URL, or <code>null</code>.
* @return Array of RevisionRange objects, or <code>null</code>.
*/
public RevisionRange[] getRevisionRange(String mergeSrc)
{
List<RevisionRange> revisions = this.getRevisions(mergeSrc);
if (revisions == null)
return null;
return revisions.toArray(new RevisionRange[revisions.size()]);
}
/**
* Parse the <code>svn:mergeinfo</code> property to populate the
* merge source URLs and revision ranges of this instance.
* @param mergeinfo <code>svn:mergeinfo</code> property value.
( run in 0.306 second using v1.01-cache-2.11-cpan-ceb78f64989 )