Utilizarea istoricului TFS TF pentru a determina cel mai recent set de modificări (Programare, Tfs, Tf Cli)

Joan Arc a intrebat.

Scriu un script care va rula un build numai dacă există o modificare în codul sursă. Trebuie să știu dacă există o modificare de la ultima execuție a build-ului. Acest lucru obișnuia să funcționeze deoarece dosarul nu era șters, astfel încât era ușor de determinat dacă a existat o modificare, dar acum totul este șters de fiecare dată când se execută compilarea. M-am gândit să folosesc comanda TFS TF history pentru a interoga ultimul set de modificări sau ultimele două seturi de modificări, dar am avut probleme în a analiza doar numărul setului de modificări din ieșire. De asemenea, m-am gândit să folosesc comanda changeset. Există vreun parametru de linie de comandă pe care îl pot utiliza pentru a răspunde la întrebarea dacă a existat o modificare de la o dată sau de la un număr de modificări?

Comentarii

  • În primul rând, Team Build are deja o funcție care face acest lucru. Folosiți altceva? În al doilea rând, este orice schimbare în depozit este suficientă pentru a declanșa compilarea, sau trebuie să vedeți dacă există o schimbare în anumite directoare sau directoare specifice? –  > Por Andrew.
  • Da, folosesc un sistem diferit, mai exact buildforge. Folosim un adaptor TFS pentru construcțiile CI, dar dorim să executăm construcția doar dacă există o actualizare. Deoarece construcția este specifică ramurii, vreau să știu doar dacă există o modificare în acea ramură/cartelier. –  > Por Ioana Arc.
  • Răspunsul de la Guanghui Qin, funcționează foarte bine, este foarte rapid și nu aveți nevoie de un spațiu de lucru pentru el. –  > Por Yogurtu.
6 răspunsuri
Guanghui Qin

Pentru cel mai recent număr changeset fără spațiu de lucru local, vă rugăm să utilizați această comandă:

tf history /collection:"http://server:8080/tfs/Collection" "$/Project" /recursive /stopafter:1 /noprompt /login:domainuser,password

Nathan

extras din fișierul meu batch pentru a construi.

set _aPath="f:TFSa"
set _TFPath="c:Program Files (x86)Microsoft Visual Studio 10.0Common7IDE"

pushd %_aPath%
%_TFPath%TF.exe history . /r /noprompt /stopafter:1 /Version:W > temp
FOR /f "tokens=1" %%a in ('findstr /R "^[0-9][0-9]*" temp') do set _BuildVersion=10.3.0.%%a
del temp
popd

utilizează un fișier temporar, dar funcționează bine.

Comentarii

  • Rețineți că nu aveți nevoie de fișierul intermediar, de ex: tf vc info d:wcode04Server.sln | findstr /R "Last modified: [^r
    ]+r
    "
    –  > Por Dustin Oprea.
Edward Thomson

După cum a menționat Andrew, TFS are încorporată o funcționalitate de integrare continuă. Cu toate acestea, da, este ușor să interoghezi seturile de modificări de la un anumit punct, fie că este vorba de o dată sau de un set de modificări. Doriți să vă uitați la istoricul dintre acel changeset și cel mai recent:

tf history <folder> /version:C<changeset>~T /noprompt /recursive

Dacă singura linie de ieșire este cea a setului de modificări pe care l-ați interogat, atunci este evident că nu au existat modificări de la acel checkin. În caz contrar, veți vedea seturile de modificări suplimentare, unul pe linie.

Comentarii

  • Da, acest lucru îmi spune care sunt seturile de modificări, inclusiv cel interogat. Cum aș putea să deslușesc doar numărul din ieșire? Există o modalitate de a analiza folosind comenzi pe loturi? –  > Por Ioana Arc.
Ka Ho

Există un adaptor care poate integra BuildForge și Microsoft Team Foundation Server. Iată url-ul dacă sunteți interesat…http://www-304.ibm.com/partnerworld/gsd/solutiondetails.do?&solution=46360&lc=en

Adaptorul Automatra TFS pentru Rational Build Forge oferă capacități de integrare continuă (CI) și de raportare.

Adaptorul TFS permite în continuare capabilități de CI atât la nivelul TFS Source (Change Set), cât și la nivelul WorkItem. Raportarea din start oferă rapoarte clare privind lista de materiale (BOM) care pot fi livrate către consumatorii din aval ai construcțiilor dumneavoastră.

În cele din urmă, după cum trebuie să știți, punctul forte al Build Forge este capacitatea sa de a face legătura între construire și implementare (și nu numai). Evident, cu aceste capacități de integrare continuă, puteți apoi avansa cu capacitatea de livrare continuă pe care cred că doriți să o obțineți.

v.karbovnichy

Scriptul meu PowerShell care se numește GetVcsRevision.ps1 și se află în subfolderul din VCS Root:

param (
    [string]$PathToTF='C:Program Files (x86)Microsoft Visual Studio 12.0Common7IDETF.exe'
    ,[Parameter(Mandatory=$true)][string]$Login
    ,[Parameter(Mandatory=$true)][string]$Password
)
$result = &$PathToTF @("history","/stopafter:1","/recursive","..*","/login:""$Login"",""$Password""") 2>&1 3>&1

if ($result.GetType().Name -eq "Object[]")
{
    <# $result format is:
        Changeset User              Date       Comment
        --------- ----------------- ---------- ----------------------------------------
        26038     user              24.06.2014 Sample commit comment

        $result[2] is:
        26038     user              24.06.2014 Sample commit comment

        $result[2].Split(" ")[0] is:
        26038
    #>

    $result[2].Split(" ")[0]
}
else
{
    "0"
}

Acesta trimite ultimul număr al setului de modificări către conducta de ieșire. Dacă ceva nu merge bine, atunci acest număr este 0.

Puteți crea o funcție din acest script și o puteți apela în scriptul de construire.

Serghei Azarkevici

Comanda mea cu o singură linie:

for /f "usebackq tokens=*" %%a in (`tf history . /recursive /noprompt /stopafter:1 /version:T ^| powershell -Command "$input | ? { $_ -imatch '^(d+)s+' } | %% { $matches[0].Trim() } | Select-Object -First 1"`) do set TIP_CHANGESET=%%a

după execuție TIP_CHANGESET variabila de mediu conține tip changeset.

Tags:,