2010-07-13 37 views
5

Với một đường dẫn thư mục cụ thể trong tfs, tôi cần phải đệ quy tìm tất cả các tệp và thư mục trong thư mục cho một changeset đã cho. Nói cách khác, tôi cần phải có được đóng cửa chuyển tiếp của một đường dẫn trong tfs cho một changeset đã cho. Vấn đề tôi phải đối mặt khi làm như vậy là liệt kê nội dung của một thư mục cụ thể trong tfs .. Làm thế nào điều này có thể xảy ra trong C#?liệt kê tất cả nội dung của một thư mục trong tfs

Trả lời

6

tôi giả sử bạn muốn 'nội dung thư mục như của changeset X' và không 'nội dung thư mục đó là một phần của changeset X'

GetIte ms là cuộc gọi quyền sử dụng, chỉ cần vượt qua trong một spec phiên bản dành cho các changeset bạn quan tâm đến

http://msdn.microsoft.com/en-US/library/bb138911.aspx

như vậy, giả sử bạn đã có một tham chiếu đến dụ VersionControlServer:.

var myFolderAtChangeset17 = versionControlServer.GetItems("$/MyFolder", new ChangesetVersionSpec(17), RecursionType.Full); 

Nếu tôi hiểu lầm và bạn muốn 'nội dung thư mục là một phần của changeset X', có một vài cách khác nhau để thực hiện nó, nhưng việc thay đổi với GetChangeset và chỉ lọc Changes là khá đơn giản.

+0

Tôi không biết thông số phiên bản. Đây là những gì tôi muốn. Cảm ơn... – Sidd

-1

Bạn có thể sử dụng dịch vụ web thay đổi để nhận tài liệu XML chứa tất cả các mục đã thay đổi cho một thay đổi cụ thể. Sau đó, chỉ cần lặp qua danh sách các mục đã thay đổi và xem chúng có nằm trong đường dẫn bạn đang tìm kiếm hay không.

Đây là URL đến webservice changeset:

http: // your_tfs_server /VersionControl/Changeset.aspx?artifactMoniker= your_changeset_number & WebView = true

+0

tôi có thể chỉ cần thực hiện phiên bản VersionControlServer.getItems() và lặp lại mảng bắt nguồn. Tôi chỉ đang thử nó ngay bây giờ ... – Sidd

+0

Bị bỏ phiếu (xin lỗi David). Bạn không nên sử dụng webservice để thực hiện việc này trong bất kỳ trường hợp (thông thường) nào. Đây là nội bộ và có thể thay đổi mà không cần thông báo. – Robaticus

2

Something như thế này có được nhiều hơn những gì bạn đang tìm kiếm cho. Điều này nhận được tất cả các thay đổi trong một changeset và lặp qua chúng, xác định những thay đổi trong đường dẫn đã cho. Điều này có thể được rút ngắn với một truy vấn LINQ, nhưng tôi lại cho nó một chút mở rộng để cung cấp cho các ý chính về những gì tôi đang cố gắng để nói:

TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080"); 
    VersionControlServer vcs = tfs.GetService<VersionControlServer>(); 

    Changeset cs = vcs.GetChangeset(6284868); 

    foreach (Change change in cs.Changes) 
    { 
     if (change.Item.ServerItem.StartsWith("$/Application Common/Dev/src")) 
     { 
      System.Diagnostics.Debug.WriteLine(string.Format("Changeset {0}, file {1}, changes {2}", 
       cs.ChangesetId, change.Item.ServerItem, change.ChangeType.ToString())); 
     } 
    } 
+0

Thanks .. Nhưng tôi không cần các mục trong một changeset cụ thể. Tôi cần tất cả các tập tin và thư mục trong một thư mục nhất định trong tfs. – Sidd

+1

Sau đó, bạn có thể sử dụng GetItems() ... câu hỏi của bạn không đề cập đến changeset, mặc dù. – Robaticus

0

Tôi nghĩ rằng một cái gì đó như thế này sẽ làm việc ..


    TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080"); 
    VersionControlServer vcs = tfs.GetService(); 
    ItemSet items; 

    items = vcs.GetItems(tfsPath, RecursionType.Full); 

Nếu bạn có bất kỳ ý tưởng khác, xin vui lòng gửi cho họ ..

+0

mã của bạn thiếu phần mà bạn định nghĩa tfsPath để chuyển đến GetItems –

Các vấn đề liên quan