using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Perforce.P4
{
///
/// Represents submitted or pending integrations.
///
public class FileIntegrationRecord
{
public FileSpec FromFile { get; set; }
public FileSpec ToFile { get; set; }
public IntegrateAction How { get; set; }
public int ChangeId { get; set; }
public FileIntegrationRecord() { }
public FileIntegrationRecord
(
FileSpec fromfile,
FileSpec tofile,
IntegrateAction how,
int changeid
)
{
FromFile = fromfile;
ToFile = tofile;
How = how;
ChangeId = changeid;
}
public void ParseIntegratedCmdTaggedData(TaggedObject obj)
{
DepotPath tp = null;
VersionSpec starttorev = null;
VersionSpec endtorev = null;
if (obj.ContainsKey("toFile"))
{
tp = new DepotPath(obj["toFile"]);
}
if (obj.ContainsKey("startToRev"))
{
string str = obj["startToRev"];
starttorev = new Revision(-1);
if (str.StartsWith("#h")
|
str.StartsWith("#n"))
{
if (str.Contains("#none"))
{
starttorev = Revision.None;
}
if (str.Contains("#have"))
{
starttorev = Revision.Have;
}
if (str.Contains("#head"))
{
starttorev = Revision.Head;
}
}
else
{
str = str.Trim('#');
int rev = Convert.ToInt16(str);
starttorev = new Revision(rev);
}
}
if (obj.ContainsKey("endToRev"))
{
string etr = obj["endToRev"];
endtorev = new Revision(-1);
if (etr.StartsWith("#h")
|
etr.StartsWith("#n"))
{
if (etr.Contains("#none"))
{
endtorev = Revision.None;
}
if (etr.Contains("#have"))
{
endtorev = Revision.Have;
}
if (etr.Contains("#head"))
{
endtorev = Revision.Head;
}
}
else
{
etr = etr.Trim('#');
int rev = Convert.ToInt16(etr);
endtorev = new Revision(rev);
}
}
ToFile = new FileSpec(tp, null, null, new VersionRange(starttorev, endtorev));
DepotPath fp = null;
VersionSpec startfromrev = null;
VersionSpec endfromrev = null;
if (obj.ContainsKey("fromFile"))
{
fp = new DepotPath(obj["fromFile"]);
}
if (obj.ContainsKey("startFromRev"))
{
string sfr = obj["startFromRev"];
startfromrev = new Revision(-1);
if (sfr.StartsWith("#h")
|
sfr.StartsWith("#n"))
{
if (sfr.Contains("#none"))
{
startfromrev = Revision.None;
}
if (sfr.Contains("#have"))
{
startfromrev = Revision.Have;
}
if (sfr.Contains("#head"))
{
startfromrev = Revision.Head;
}
}
else
{
sfr = sfr.Trim('#');
int rev = Convert.ToInt16(sfr);
startfromrev = new Revision(rev);
}
}
if (obj.ContainsKey("endFromRev"))
{
string efr = obj["endFromRev"];
endfromrev = new Revision(-1);
if (efr.StartsWith("#h")
|
efr.StartsWith("#n"))
{
if (efr.Contains("#none"))
{
endfromrev = Revision.None;
}
if (efr.Contains("#have"))
{
endfromrev = Revision.Have;
}
if (efr.Contains("#head"))
{
endfromrev = Revision.Head;
}
}
else
{
efr = efr.Trim('#');
int rev = Convert.ToInt16(efr);
endfromrev = new Revision(rev);
}
}
FromFile = new FileSpec(fp, null, null, new VersionRange(startfromrev, endfromrev));
if (obj.ContainsKey("how"))
{ StringEnum How = obj["how"]; }
if (obj.ContainsKey("change"))
{
int change = -1;
int.TryParse(obj["change"], out change);
ChangeId = change;
}
}
public static FileIntegrationRecord FromIntegratedCmdTaggedData(TaggedObject obj)
{
FileIntegrationRecord val = new FileIntegrationRecord();
val.ParseIntegratedCmdTaggedData(obj);
return val;
}
}
}
public enum IntegrateAction
{
BranchFrom, BranchInto, MergeFrom, MergeInto, MovedFrom, MovedInto,
CopyFrom, CopyInto, Ignored, IgnoredBy, DeleteFrom, DeleteInto,
EditFrom, EditInto, AddInto
}