2008-10-02 22 views
7

Perforce cho phép mọi người kiểm tra các tệp không thay đổi. Tại sao bất kỳ hệ thống điều khiển phiên bản nào cũng cho phép điều này vượt ra ngoài tôi, nhưng đó là một chủ đề cho một câu hỏi khác. Tôi muốn tạo trình kích hoạt sẽ từ chối việc gửi các tệp không thay đổi. Tuy nhiên, tôi không có kinh nghiệm với trình kích hoạt Perforce. Từ những gì tôi đã đọc, tôi đoán đây sẽ là trình kích hoạt "Thay đổi nội dung" vì các tệp được gửi sẽ phải được phân biệt với các bản sửa đổi đầu tương ứng mà chúng sắp sửa thay thế. Tôi sẽ cần phải lặp qua các tập tin đến và chắc chắn rằng họ đã thực sự thay đổi tất cả. Vấn đề là, tôi không có ý tưởng làm thế nào để đi về nó.Perforce kích hoạt để từ chối gửi các tập tin không thay đổi?

Bất kỳ ai có trải nghiệm kích hoạt Perforce đều cung cấp ví dụ hoặc ít nhất là cho tôi đi đúng hướng không?

+2

Xin chào, tôi đã vấp phải câu hỏi của bạn từ năm ngoái. Chỉ cần một bình luận: Có vẻ như với tôi rằng việc tạo một "đồng bằng trống" của một tệp (nghĩa là một phiên bản không thay đổi của một tệp) để làm cho p4 tin rằng việc hợp nhất trên một nhánh đã xảy ra thông qua lệnh integ (ngay cả khi bạn không hợp nhất bất cứ thứ gì và giữ phiên bản nhánh của bạn theo cách nó), để sử dụng lệnh integ tiếp theo để tiếp tục hợp nhất từ ​​nhánh này sang nhánh khác sẽ không phát hiện xung đột trên tệp - vì P4 sẽ tin rằng đã hợp nhất trong quá khứ. Đúng nếu tôi sai nhưng đó là những gì tôi hiểu được từ khóa đào tạo cơ bản. –

Trả lời

1

Nếu bạn nhìn vào bảng Kích hoạt trong Perforce, bạn sẽ thấy trình kích hoạt đó không là gì ngoài các tập lệnh được gọi khi một số sự kiện xảy ra. Trong trường hợp của bạn, sự kiện thay đổi nội dung được kích hoạt.

Bạn có một số tùy chọn để viết tập lệnh tương tác với Perforce. Perforce downloads page có thư viện và mô-đun cho nhiều ngôn ngữ sử dụng rộng rãi. Bất kỳ điều này sẽ giúp bạn và đơn giản hóa rất nhiều những gì bạn cần làm. Ngoài ra, hãy kiểm tra Perforce Documentation page và tải xuống hướng dẫn của quản trị viên. Nó sẽ giải thích cách tạo trình kích hoạt, v.v.

Về cơ bản, bạn cần viết một tập lệnh sẽ lấy thông tin từ danh sách thay đổi đang được gửi và cho mỗi tệp trong đó chạy lệnh "diff" so với máy chủ. Nếu bạn tìm thấy một tệp không thay đổi, bạn cần vô hiệu hóa nội dung gửi.

Mô-đun Perforce trên ngôn ngữ yêu thích của bạn và hướng dẫn của quản trị viên sẽ cung cấp cho bạn tất cả các câu trả lời bạn cần.

5

Trong phiên bản gần đây của perforce cho phép một thiết lập khách hàng, giúp ngăn chặn nộp hồ sơ thay đổi:

SubmitOptions: Flags to change submit behaviour. 

      submitunchanged   All open files are submitted 
      submitunchanged+reopen (default). 

      revertunchanged   Files that have content or type 
      revertunchanged+reopen changes are submitted. Unchanged 
             files are reverted. 

      leaveunchanged   Files that have content or type 
      leaveunchanged+reopen  changes are submitted. Unchanged 
             files are moved to the default 
             changelist. 

          +reopen  appended to the submit option flag 
             will cause submitted files to be 
             reopened on the default changelist. 

Đây có thể là một con đường để điều tra nếu người dùng chỉ là kiểm tra file không thay đổi do sự thờ ơ.

EDIT:

Cho rằng bạn muốn thực thi những hạn chế bất kể các thiết lập không gian làm việc của người dùng, sau đó bạn sẽ cần một kích hoạt như đề xuất trong câu trả lời khác.

Bạn sẽ cần phải xem Perforce's documentation để tìm hiểu chi tiết, nhưng bạn sẽ cần trình kích hoạt nội dung thay đổi.

Có thể bạn sẽ muốn chuyển vào% user% cũng như% change% cộng với các biến khác, để bạn có thể hạn chế các hoạt động tốn kém chỉ cho người dùng vấn đề.

1

Bạn sẽ muốn viết trình kích hoạt nội dung thay đổi. Những trình kích hoạt này được chạy sau khi các tệp được chuyển đến máy chủ, nhưng trước khi chúng được cam kết với DB. Theo các tài liệu cực chẳng đả, bạn có thể sử dụng một lệnh tương tự như sau

p4 diff //depot/path/[email protected]=<change> 

Trong cò đổi nội dung @ = (trong đó sự thay đổi là số sách thay đổi gửi đến cò) sẽ giúp bạn có được các nội dung của các tệp đã được gửi.Nếu bạn đang tìm kiếm một cách để kiểm tra đối với các phiên bản máy chủ, bạn có thể có thể làm điều gì đó như

p4 diff -sr //[email protected]=<change> 

Lệnh -sr sẽ báo cáo trên các tập tin mở và cũng giống như các nội dung kho hiện hành. Kể từ khi các tập tin chưa được cam kết, tôi sẽ giả định rằng bạn sẽ thực sự nhận được một danh sách các tập tin có nội dung đã được chuyển giao cho máy chủ là giống như bản sửa đổi đầu hiện tại trong kho. Nếu p4 diff -sr trả về bất kỳ tệp nào giống nhau, trả lại mã thoát khác 0 và việc gửi sẽ bị tạm dừng và người dùng sẽ phải hoàn nguyên các tệp không thay đổi của mình theo cách thủ công.

Tôi không nghĩ rằng bạn muốn thực sự sửa đổi nội dung của danh sách thay đổi bằng cách hoàn nguyên cho anh ấy. Nghe có vẻ quá nguy hiểm.

Lưu ý rằng bạn có thể viết trình kích hoạt của mình bằng bất kỳ ngôn ngữ nào có ý nghĩa (như một áp phích trước được đề xuất). Tôi nghĩ rằng loại kích hoạt này sẽ khá nặng. Về cơ bản, bạn sẽ thực thi một sự khác biệt trên tất cả các nội dung được gửi cho tất cả người dùng để làm cho một bước của nhà phát triển phù hợp. Có lẽ đó là một mức giá hợp lý để trả tiền, nhưng tùy thuộc vào số lượng người dùng và kích thước của danh sách thay đổi (và tệp) của họ, loại trình kích hoạt này có thể mất nhiều thời gian để chạy.

+0

Tôi muốn giảm chi phí, bạn có thể chuyển% user% cho tập lệnh kích hoạt và sau đó chỉ thực hiện đánh giá thay đổi tốn kém nếu% user% khớp với người dùng vấn đề. –

+0

Điều đó phải là "Theo thứ tự" không phải "tôi đặt hàng". –

+0

có, điểm tốt. Điều đó sẽ giúp ích nếu bạn muốn giới hạn nó cho người dùng hoặc một nhóm người dùng cụ thể. – Mark

1

Thay vì sử dụng trình kích hoạt, bạn có thể chỉnh sửa không gian làm việc của mình (giả sử bạn có quyền chính xác) để mặc định cho chiến lược gửi tránh điều này. Theo mặc định (một lần nữa tôi không biết tại sao) peforce sẽ gửi tất cả các tệp đã chọn ngay cả khi không thay đổi, nhưng có thể thay đổi hành vi này. Mở không gian làm việc của mình và đặt trình đơn thả xuống SubmitOptions thành 'revertunchanged' sẽ hoàn nguyên bất kỳ tệp nào trong danh sách thay đổi đã không thay đổi hoặc 'bỏ quên' sẽ giữ cho chúng được kiểm tra nhưng không gửi chúng.

Cũng có thể thực hiện việc này trên một danh sách thay đổi cá nhân gửi nếu anh ta chỉ muốn xem Trình đơn thả xuống khi gửi.

Chúng tôi đã gặp vấn đề này trong môi trường của mình, nhưng một khi tôi giải thích cho những người phạm tội những gì đang diễn ra và việc thay đổi hành vi mặc định họ đã thay đổi mà không gặp trở ngại nào cũng dễ dàng.

0

Kịch bản dưới đây được thực hiện trong Linux bằng cách sử dụng tập lệnh perl. Tôi chắc rằng bạn có thể điều chỉnh nó khi cần thiết trong Windows và sử dụng một ngôn ngữ kịch bản khác với Perl.

Là người dùng quản trị, nhập p4 triggers.

Thêm mã này dưới dòng Triggers: của tập lệnh của bạn.

Trigger_name change-content //... "/<path_to_trigger_script>/<script_name> %changelist% %serverhost% %serverport% %user%"

Các Trigger_name là tùy ý. //... có nghĩa là tất cả các tệp đã được phiên bản của bạn, nhưng bạn có thể sửa đổi điều này nếu cần. Mọi thứ được bao quanh bởi % là một tên biến đặc biệt duy nhất cho Perforce, và đây sẽ là các đối số cho tập lệnh của bạn. Đây phải là tất cả những gì bạn cần. Lưu ý rằng bất kỳ thứ gì được bao quanh bởi <> đều biến đổi và phụ thuộc vào môi trường của bạn.

Bây giờ, đối với tập lệnh. Đây là những gì tôi đã viết.

#!/usr/bin/perl 

# ----- CHECK 1 : Make sure files NOT identical 

# get variables passed in through triggers call 'p4 triggers' 
$ChangeNum = $ARGV[0]; #change number 
$Server = $ARGV[1]; 
$Port = $ARGV[2]; 
$User = $ARGV[3]; 
$p4 = "<path_to_p4_exec>/p4 -p $Port "; 
# get list of files opened under the submitted changelist 
@files = `$p4 opened -a -c $ChangeNum | cut -f1 -d"#"`; 

# go through each file and compare to predecessor 
# although workspace should be configured to not submit unchanged files 
# this is an additional check 
foreach $file (@files) 
{ 
    chomp($file); 
    # get sum of depot file, the #head version 
    $depotSum = `$p4 print -q $file\#head | sum`; 
    # get sum of the recently submitted file, use @=$ChangeNum to do this 
    $clientSum = `$p4 print -q $file\@=$ChangeNum | sum`; 

    chomp $depotSum; 
    chomp $clientSum; 
    # if 2 sums are same, issue error 
    if ($depotSum eq $clientSum) 
    { 
     # make sure this file is opened for edit and not for add/delete 
     if (`$p4 describe $ChangeNum | grep "edit"`) 
     { 
     printf "\nFile $file identical to predecessor!"; 
     exit(1); 
     } 
    } 

} 
0

Chúng tôi có một tập lệnh kích hoạt bắt đầu bằng cách kiểm tra SubmitOptions của thông số khách hàng để đệ trình. Nếu đó không phải là hiện tại, thì kịch bản kích hoạt có thể thoát ra, vì người dùng không thể gửi một tệp không thay đổi. Nếu không, chúng tôi kiểm tra tất cả các tệp nơi hành động được chỉnh sửa và loại tệp chưa được thay đổi. Chúng tôi so sánh các tệp đó với bản sửa đổi trước đó.

0

Thêm phần này vào bảng triggers của bạn:

Triggers: 
    myTrigger form-in client "sed -i -e s/submitunchanged/leaveunchanged/ %formfile%" 

này sẽ ngăn chặn bất cứ ai từ tiết kiệm một khách hàng với các tùy chọn submitunchanged, do đó sẽ gây khó khăn cho họ để nộp hồ sơ thay đổi.

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