using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Perforce.P4 { /// /// Identifies a specific revision or revision range of a Perforce managed SCM resource. /// public abstract class VersionSpec { public abstract override string ToString(); public static HeadRevision Head = new HeadRevision(); public static HaveRevision Have = new HaveRevision(); public static NoneRevision None = new NoneRevision(); } /// /// A revision range specifier consisting of a lower and upper revision. /// public class VersionRange : VersionSpec { /// /// A revision range specifier consisting of a lower and upper revision. /// ///version spec to get lower revision ///version spec to get upper revision public VersionRange(VersionSpec lower, VersionSpec upper) { if (lower == null) { throw new ArgumentNullException("lower"); } if (upper == null) { throw new ArgumentNullException("upper"); } Lower = lower; Upper = upper; } /// /// A revision range specifier consisting of a lower and upper revision. /// ///int to get lower revision ///int to get upper revision public VersionRange(int lower, int upper) { Lower = new Revision(lower); Upper = new Revision(upper); } /// /// Lower version revision. /// public VersionSpec Lower { get; set; } /// /// Upper version revision. /// public VersionSpec Upper { get; set; } ///ToString method for for VersionRange /// String version range public override string ToString() { return String.Format( "{0},{1}", Lower, Upper); } ///Equals method for for VersionRange ///object to get version range /// True/False public override bool Equals(object obj) { if (obj == null) { return false; } if (obj.GetType() != this.GetType()) { return false; } VersionRange o = obj as VersionRange; if (o.Lower != null) { if (o.Lower.Equals(this.Lower) == false) { return false; } } else { if (this.Lower != null) { return false; } } if (o.Upper != null) { if (o.Upper.Equals(this.Upper) == false) { return false; } } else { if (this.Upper != null) { return false; } } return true; } } /// /// A revision specifier #head. /// public class HeadRevision : VersionSpec { ///ToString method for for HeadRevision /// #head public override string ToString() { return "#head"; } ///Equals method for for HeadRevision ///object to get head revision /// True/False public override bool Equals(object obj) { if (obj == null) { return false; } if (obj.GetType() != this.GetType()) { return false; } return true; } } /// /// A revision specifier #have. /// public class HaveRevision : VersionSpec { ///ToString method for for HaveRevision /// #have public override string ToString() { return "#have"; } ///Equals method for for HaveRevision ///object to get have revision /// True/False public override bool Equals(object obj) { if (obj == null) { return false; } if (obj.GetType() != this.GetType()) { return false; } return true; } } /// /// A revision specifier #none. /// public class NoneRevision : VersionSpec { ///ToString method for for NoneRevision /// #none public override string ToString() { return "#none"; } ///Equals method for for NoneRevision ///object to get none revision /// True/False public override bool Equals(object obj) { if (obj == null) { return false; } if (obj.GetType() != this.GetType()) { return false; } return true; } } /// /// A revision specifier that is a single revision. /// public class Revision : VersionSpec { /// /// A revision specifier that is a single revision. /// public Revision(int rev) { Rev = rev; } public int Rev { get; private set; } ///ToString method for for Revision /// String client revision version public override string ToString() { if (Rev >= 0) { return String.Format("#{0}", Rev); } return string.Empty; } ///Equals method for for Revision ///object to get revision /// True/False public override bool Equals(object obj) { if (obj == null) { return false; } if (obj.GetType() != this.GetType()) { return false; } Revision o = obj as Revision; if (o.Rev != this.Rev) { return false; } return true; } } /// /// A revision specifier that is a date and time. /// /// The date/time. public class DateTimeVersion : VersionSpec { /// The date/time. public DateTimeVersion(DateTime date) { Version = date; } ///get Version as date/time public DateTime Version { get; private set; } ///ToString method for for DateTimeVersion /// String date/time version public override string ToString() { return String.Format("@{0}", Version.ToString("yyyy/M/d")); } ///Equals method for for DateTimeVersion ///object to get date/time /// True/False public override bool Equals(object obj) { if (obj == null) { return false; } if (obj.GetType() != this.GetType()) { return false; } DateTimeVersion o = obj as DateTimeVersion; if (o.Version != this.Version) { return false; } return true; } } /// /// A revision specifier that is a label name. /// public class LabelNameVersion : VersionSpec { /// The label. public LabelNameVersion(string LabelName) { Version = LabelName; } ///get Version as label public string Version { get; private set; } ///ToString method for for LabelNameVersion /// String label version public override string ToString() { return String.Format("@{0}",Version); } ///Equals method for for LabelNameVersion ///object to get label /// True/False public override bool Equals(object obj) { if (obj == null) { return false; } if (obj.GetType() != this.GetType()) { return false; } LabelNameVersion o = obj as LabelNameVersion; if (o.Version != this.Version) { return false; } return true; } } /// /// A revision specifier that is a changelist id. /// public class ChangelistIdVersion : VersionSpec { /// The changelist. public ChangelistIdVersion(int Changelist) { ChanglistId = Changelist; } ///get Version as changelist public int ChanglistId { get; private set; } ///ToString method for for ChangelistIdVersion /// String changelist version public override string ToString() { return String.Format("@{0}", ChanglistId); } ///Equals method for for ChangelistIdVersion ///object to get changelist /// True/False public override bool Equals(object obj) { if (obj == null) { return false; } if (obj.GetType() != this.GetType()) { return false; } ChangelistIdVersion o = obj as ChangelistIdVersion; if (o.ChanglistId != this.ChanglistId) { return false; } return true; } } /// /// A revision specifier that is a client name. /// public class ClientNameVersion : VersionSpec { /// The client name./// public ClientNameVersion(string ClientName) { Version = ClientName; } ///get Version as client name public string Version { get; private set; } ///ToString method for for ClientNameVersion /// String client name version public override string ToString() { return String.Format("@{0}", Version); } ///Equals method for for ClientNameVersion ///object to get client name /// True/False public override bool Equals(object obj) { if (obj == null) { return false; } if (obj.GetType() != this.GetType()) { return false; } ClientNameVersion o = obj as ClientNameVersion; if (o.Version != this.Version) { return false; } return true; } } /// /// A revision specifier that is a file action. /// public class ActionVersion : VersionSpec { /// The file action./// public ActionVersion(string Action) { Version = Action; } ///get Version as action public string Version { get; private set; } ///ToString method for for ActionVersion /// String action version public override string ToString() { return String.Format("@{0}", Version); } ///Equals method for for ActionVersion ///object to get action type /// True/False public override bool Equals(object obj) { if (obj == null) { return false; } if (obj.GetType() != this.GetType()) { return false; } ActionVersion o = obj as ActionVersion; if (o.Version != this.Version) { return false; } return true; } } /// /// A revision specifier for a file that is shelved in a changelist id. /// public class ShelvedInChangelistIdVersion : VersionSpec { /// The changelist. public ShelvedInChangelistIdVersion(int Changelist) { ChanglistId = Changelist; } ///get Version as changelist public int ChanglistId { get; private set; } ///ToString method for for ChangelistIdVersion /// String changelist version public override string ToString() { return String.Format("@={0}", ChanglistId); } ///Equals method for for ChangelistIdVersion ///object to get changelist /// True/False public override bool Equals(object obj) { if (obj == null) { return false; } if (obj.GetType() != this.GetType()) { return false; } ChangelistIdVersion o = obj as ChangelistIdVersion; if (o.ChanglistId != this.ChanglistId) { return false; } return true; } } }