2010-01-08 3 views
5

Gibt es eine Möglichkeit zur Abfrage TFS Datenbank zu erhalten, die letzten 10 Check-in-DetailsAbfrage TFS Datenbank letzten 10 Check-in-Details

Die Ausgabe sollte wie

etwas zu holen
File name |  Comment    | Changed By  |  Date 
---------------------------------------------------------------------------- 
Test.cs   Added new functionality  username   01/08/2010 

Ich bin Beachten Sie, dass die obige Ergebnismenge mithilfe von TFS SDK abgerufen werden kann. Aber ich möchte wissen, ob gibt es eine Möglichkeit, die TFS-Datenbank abzurufen, um die oben genannten Daten abzurufen.

Dank

+0

Wie wäre es damit. Rufen Sie das Resultset über das TFS SDK ab, während Profiler auf dem TFS-Server ausgeführt wird. Sehen Sie, welche SQL-Anweisungen generiert werden. –

Antwort

1

Als Workaround wie über die folgende Abfrage .. Aber ich denke, dass es mir die falschen Kommentare zurückgibt .. nicht sicher warum.

SELECT top 10 
C.ChangeSetId, 
V.FullPath, 
V.ParentPath, 
REPLACE(V.ChildItem,'\','') as [FileName], 
C.CreationDate, 
I.DisplayName, 
C.Comment 
FROM tbl_Version(nolock) V 
INNER JOIN tbl_File (nolock) F ON V.ItemId = F.ItemId 
INNER JOIN tbl_Changeset (nolock) C ON V.VersionTo = C.ChangeSetId 
INNER JOIN tbl_Identity (nolock) I ON C.CommitterId = I.IdentityId 
where v.ParentPath like '$\' + (select name from [TfsWorkItemTracking].[dbo].[treenodes] where parentid=0 and fdeleted=0 and id=524) + '\%' 
order by C.CreationDate desc 

Vielen Dank für die Buchung der obigen Abfrage @http://social.msdn.microsoft.com/Forums/en-US/tfsreporting/thread/32d2c27e-825b-43bb-b156-36048a3e70cb/

8

Wenn ich Ihre Frage richtig verstanden habe, wird diese Sie die meisten der Weg dorthin in SQL erhalten:

SELECT TOP 10 
V.ChildItem AS [File name], 
CS.Comment, 
I.DisplayName AS [Changed By], 
CS.CreationDate AS [Date] 
FROM tbl_Changeset CS 
INNER JOIN tbl_Identity I ON I.IdentityID = CS.OwnerID 
INNER JOIN tbl_Version V ON V.VersionFrom = CS.ChangesetID 
ORDER BY CS.CreationDate DESC 

Es gibt einige Zeichen in den Dateinamen entkommen, die auftauchten, während ich Testen dieser auf meiner TFS-Instanz (wie Unterstreichungszeichen werden ">"). Ansonsten sollte Ihnen das gut tun.

+0

danke saul. Das funktioniert für mich. Können Sie bitte. lassen Sie mich wissen, wenn das oben genannte geändert werden muss, um die Ergebnisse für ein bestimmtes Projekt zu geben, wie kann das getan werden? – stackoverflowuser

+0

Ich vermute, Sie haben die Abfrage geändert. Die neue Abfrage gibt nicht die beabsichtigten Ergebnisse. – stackoverflowuser

+0

Ich kehrte zu der ursprünglichen Abfrage zurück. Entschuldigung für die Verwirrung. Was das für ein bestimmtes Projekt angeht, bin ich mir nicht sicher, ob dies möglich ist. Die TFS-Versionskontrolle verfolgt Changesets standardmäßig nicht eindeutig in einem Teamprojekt. Die einzige Möglichkeit, dies zu erreichen, würde davon abhängen, dass Benutzer alle ihre Changesets bestimmten Workitems in einem bestimmten Teamprojekt zuordnen. –

0

Wenn Sie Zugriff auf den SQL-Server haben, der die TFS-Datenbank hostet, müssen Sie nach TFSWarehouse suchen, dann können Sie nach den Tabellen Work Item, tbl_Changeset, tbl_Identity, tbl_Version usw. suchen, von denen Sie einige Informationen abrufen können.

Thnks.

3

Viele dieser Anfragen nicht mehr relevant sind mit neueren Fällen von TFS mark.crockett. Einer der Hauptgründe ist, dass die Benutzeridentitäten (tbl_Identity) verschoben wurden. Tfs_DefaultCollection ist die Datenbank, in der alle für eine bestimmte Sammlung relevanten Informationen gespeichert wurden. TFS kann jedoch mehrere Sammlungen hosten AND Ein Administrator kann den Namen der Standardkollektion ändern, wenn er TFS einrichtet.

Als solche wurden alle Benutzeridentitäten in die Tfs_Configuration-Datenbank verschoben;

select * from [tfs_Configuration].dbo.tbl_Identity 

zu beschreibenden Teil des Kontonamen (Kontoname oder Display) von einer Sammlung DB Zugang erlangen wird durch Join erreicht von [tfs_DefaultCollection] .dbo.tbl_IdentityMap

select * 
from [tfs_Configuration].dbo.tbl_Identity I 
JOIN [tfs_DefaultCollection].dbo.tbl_IdentityMap IM 
    ON I.Id = IM.MasterID 

Mit diesen Informationen in der Hand , können wir jetzt die folgende Abfrage erzeugen, um die letzten 100 ChangeSets, die an TFS übergeben wurden, sowie den Namen des Commiters anzuzeigen.

select top 100 * 
from tbl_changeset as c 
JOIN tbl_IdentityMap IM 
    ON C.OwnerID = IM.localId 
JOIN tfs_configuration.dbo.tbl_Identity u 
    ON IM.MasterID = u.Id 
Order by C.ChangeSetID DESC 

an diesen Daten Sehen, wir eine Menge von IDs sehen können, Sids, Lookups, etc. Was wir NICHT in diesen Daten zu sehen ist, dass Informationen über die Datei, die über die Niederlassung begangen oder Informationen wurde die Commit wurde gemacht. Diese Informationen stammen aus der Tabelle tbl_Version.

select top 100 * 
from [tfs_DefaultCollection].dbo.tbl_changeset as c 
JOIN [tfs_DefaultCollection].dbo.tbl_IdentityMap IM 
    ON C.OwnerID = IM.localId 
JOIN [tfs_configuration].dbo.tbl_Identity u 
    ON IM.MasterID = u.Id 
JOIN [tfs_DefaultCollection].dbo.tbl_Version as v 
    ON v.Versionfrom = c.ChangeSetId 
Order by C.ChangeSetID DESC 

[tfs_DefaultCollection] .dbo.tbl_Version hat ein paar Spalten von Interesse, nämlich; ParentPath, ChildItem & FullPath.Was hier fehlt, sind nützliche Informationen über den Zweig, an dem das Commit durchgeführt wurde. Zweiginformationen sind in einem der beiden verfügbaren Pfadfelder eingebettet.

$\da3da7cf"80b5"4385"b3dc"ebb3088f3c01\Features\Inpatient\Source\Yadda\Yadda\Yadda\ 

Dies wirft die nächste Frage auf, wo Branch Info in TFS gespeichert ist? Dank der obigen Antwort StackOverflowUsers wurde diese Information in der Tabelle [tfs_DefaultCollection] .dbo.TreeNodes gefunden;

select * from [tfs_DefaultCollection].dbo.[TreeNodes] where parentID=0 and fDeleted=0 

Die Spalte CssNodeID ist die ID wir suchen Sinn aus dem FullPath

CoolBranchName da3da7cf-80b5-4385-b3dc-ebb3088f3c01 

jedoch zu machen, dies stellt uns unsere nächste Herausforderung in Bezug auf die TFS-Datenbanken. Viele Informationen sind kodiert und/oder eingebettet, so dass wir ein paar Dinge manipulieren müssen, um zu bekommen, wonach wir suchen.

In diesem Fall der Teil des Werts [tfs_DefaultCollection] .dbo.tbl_Version.ParentPath oder [tfs_DefaultCollection] .dbo.tbl_Version.FullPath, der die Verzweigungsinformationen enthält.

Das hässliche kleine diddy hier extrahiert die ID-Teil des Wertes ParentPath Feld und ersetzt alle doppelten Anführungszeichen mit Bindestrichen, die uns einen ID-Wert gibt wir [Tfs_DefaultCollection] .dbo.TreeNodes

SUBSTRING(
    REPLACE(v.ParentPath, '$\', ''), 
    CHARINDEX('\', REPLACE(v.ParentPath, '$\', '')), 
    (LEN(v.ParentPath) - CHARINDEX('\', REPLACE(v.ParentPath, '$\', ''))) 
) 
abfragen können

All dies in Verbindung mit einer abzufragenden Abfrage einfügen Die letzten [X] Check-In-Details ergeben Folgendes:

select top 10 
    c.CreationDate, 
    c.Comment, 
    u.DisplayName as CommittingUser, 
    TN.Name as BranchName, 
    SUBSTRING(
     REPLACE(v.ParentPath, '$\', ''), 
     CHARINDEX('\', REPLACE(v.ParentPath, '$\', '')), 
     (LEN(v.ParentPath) - CHARINDEX('\', REPLACE(v.ParentPath, '$\', ''))) 
    ) as ChangedFile 
from tbl_changeset as c 
JOIN tbl_IdentityMap IM 
    ON C.OwnerID = IM.localId 
JOIN [Tfs_Configuration].dbo.tbl_Identity u 
    ON IM.MasterID = u.Id 
JOIN dbo.tbl_Version as v 
    ON v.Versionfrom = c.ChangeSetId 
LEFT JOIN dbo.TreeNodes TN with(nolock) 
    ON TN.CssNodeId = REPLACE(
     SUBSTRING(
      REPLACE(v.ParentPath, '$\', ''), 
      0, 
      CHARINDEX('\', REPLACE(v.ParentPath, '$\', '')) 
     ), 
     '"', '-' 
    ) 
    AND parentID=0 
    AND fDeleted=0 
Order by c.CreationDate desc 

Bitte beachte, dass ich die DB-Qualifikation für alle Abfragen enthalten den endgültige Abfragekontext zu schaffen, führen auf dem Tisch in der Nähe befindet.

Verwandte Themen