/ / Získanie "zlučiteľných revízií" pomocou programu SharpSvn - c #, svn, tortoisesvn, sharpsvn

Získanie "zlučiteľných revízií" pomocou programu SharpSvn - c #, svn, tortoisesvn, sharpsvn

Pri nastavovaní zlúčenia klient TortoiseSvnmá skvelé začiarkavacie políčko označené ako "Skryť revízie bez splynutia". Hľadám reprodukovanie zoznamu revízií, ktoré sa zobrazia, keď je povolený pomocou funkcie SharpSvn.

TortoiseSVN

Na TortoiseSvn dokumentácie vysvetľuje toto políčko:

Pri použití korešpondencie, sledovanie dialóg denníka sa zobrazia predtým zlúčených revízie a revízie predchádzajúca spoločného predka bod, t.j.predtým, ako pobočka skopírovala, ako sivé. Skryť-mergeable revízie políčko umožňuje odfiltrovať tieto revízie úplne tak vidíte iba revízie, ktoré môžu byť zlúčené.

Ako môžete reprodukovať túto funkciu v SharpSvn kód? Potrebujem zoznam SvnLogEventArgs (alebo podobný), ktoré sú kandidátmi pre zlúčenie.

Aktuálny stav: som "ve len dostal pokiaľ ťahanie denníky pre obe vetvy.Môžem "t zistiť, ako získať príslušné svn:mergeinfo atribút alebo čo s tým robiť, raz som si to.

odpovede:

1 pre odpoveď č. 1

Stále som chytal, a po odkazy a tu "s čo som skončil:

using (var client = new SvnClient())
{
var release = SvnTarget.FromUri(new Uri(@"https://******/branches/Release"));
var trunk = SvnTarget.FromUri(new Uri(@"https://******/trunk"));

string trunkMergeinfo, releaseMergeinfo;
client.GetProperty(release, "svn:mergeinfo", out releaseMergeinfo);
client.GetProperty(trunk, "svn:mergeinfo", out trunkMergeinfo);
var relInfos = releaseMergeinfo.Split("n");
var trunkInfos = trunkMergeinfo.Split("n");

// This is here because I don"t know what will happen once I merge something into trunk.
Debug.Assert(relInfos.Except(trunkInfos).Count() == 1,"Too many unknown merge paths");

var trunklist = relInfos.SingleOrDefault(i => i.StartsWith("/trunk:"));
var revisions = trunklist.Replace("/trunk:", "").Split(",").SelectMany(t =>
{
// If the log contains a range, break it out to it"s specific revisions.
if (t.Contains("-"))
{
var match = Regex.Match(t, @"(d+)-(d+)");
var start = int.Parse(match.Groups[1].Value);
var end = int.Parse(match.Groups[2].Value);
return Enumerable.Range(start, end - start + 1).ToArray();
}
else
return new[] { int.Parse(t) };
}).Select(x => (long)x);

Collection<SvnLogEventArgs> baseRevs;
// Why can"t this take "trunk" or a property thereof as an argument?
client.GetLog(new Uri(@"https://******/trunk"), new SvnLogArgs { Start = 1725, End = SvnRevisionType.Head }, out baseRevs);
baseRevs.Reverse().Where(r => !revisions.Contains(r.Revision) ).Select(x => x.LogMessage).Dump();
}

Dúfajme, že to pomôže niekto iný, aj keď som "ll Poznámka, že nemá veľa rozum kontroly, že som" d do výrobnej kód - je to zjednodušené kritérium, ktoré verzia.