2009-05-15 33 views
38

Tôi đang viết một tập lệnh sẽ thêm dự án mới vào kho lưu trữ, dựa trên tên được cung cấp bởi người dùng. Một phần của điều này liên quan đến việc kiểm tra xem một url có cùng tên không tồn tại trên kho lưu trữ hay không.Kiểm tra xem url kho svn không tồn tại

Trong kho, tất cả các dự án của nhóm chúng tôi được lưu trữ trong

https://developernetwork.repo.net/svn/Projects/

Hãy nói rằng người dùng muốn gọi dự án "Máy tính" và chạy kịch bản. Trong trường hợp này, chúng ta cần phải đảm bảo rằng những điều sau đây không tồn tại trong kho

https://developernetwork.repo.net/svn/Projects/Calculator/

Có một lệnh svn mà tôi có thể sử dụng để thực hiện điều đó? Thật không may tôi không thể nhìn thấy một lệnh thích hợp tôi có thể sử dụng trong tài liệu svn (http://svnbook.red-bean.com/en/1.0/svn-book.html) ở tất cả.

+3

Các tài liệu bạn liên kết đến là lối thoát của ngày, cho svn 1.0. Đọc http://svnbook.red-bean.com/nightly/en/index.html để biết các tài liệu mới nhất. –

Trả lời

37

Bạn chỉ có thể sử dụng

svn ls https://developernetwork.repo.net/svn/Projects/Calculator/ 

Nó sẽ cho bạn biết nếu kho (thư mục) tồn tại hay không.

Cập nhật

cho thư mục với nhiều tác phẩm sử dụng:

svn ls http://server/svn/foo --depth empty 
+0

Tính năng này hoạt động. Nếu thư mục không tồn tại, tôi nhận được lỗi sau: svn: URL 'https://developernetwork.repo.net/svn/Projects/Calculator/ ' không tồn tại trong bản sửa đổi đó. Đó phải là chuỗi tìm kiếm đủ tốt. Chỉ cần không quan tâm, có cách nào tốt hơn để tập lệnh phân tích kết quả hơn tìm kiếm kết quả văn bản cho kết quả "không tồn tại trong bản sửa đổi đó" không? – Andy

+0

Như được đề xuất trong nhận xét khác, tìm kiếm 'không tồn tại' có thể không lý tưởng vì thông báo lỗi thay đổi từ phiên bản sang phiên bản, ví dụ: svn 1.6.1 đã thay đổi thông báo lỗi thành 'svn: Không tìm thấy kho lưu trữ trong' svn + ssh: // '. Tuy nhiên, phân tích cú pháp xml không đáng tin cậy như svn 1.6.1, nếu kho lưu trữ không thoát, nó S return trả về một xml chưa hoàn chỉnh không phân tích được. Điều đó sẽ làm cho nó tồi tệ hơn. Cách tốt nhất tôi có thể nghĩ có lẽ chỉ là để kiểm tra xem url kho lưu trữ ban đầu mà bạn đã gửi có ở trong thư trả về hay không. Nó có vẻ là đảm bảo rằng nó sẽ được trả lại nếu có điều gì đó sai. – Liwen

+0

Cảm ơn bạn. Việc phân tích đầu ra văn bản của các lệnh là một trong những khía cạnh thú vị nhất của việc viết kịch bản, nhưng nó phải được thực hiện. Tôi sẽ kiểm tra url của kho lưu trữ trong thư trả về sau đó. – Andy

8

Tiếp nhận thông tin về bất kỳ kho hiện có (ví dụ như cho có thể làm phong phú thêm một thông báo lỗi), bạn cũng có thể sử dụng

svn info https://developernetwork.repo.net/svn/Projects/Calculator/ 

Đối với dự án không tồn tại, nó sẽ chỉ trả lại

svn: Could not open the requested SVN filesystem 
+0

Thực ra, phiên bản Slik SVN của tôi đã trả lại: https://developernetwork.repo.net/svn/Projects/Calculator/ : (Không phải URL hợp lệ) svn: Đã xảy ra sự cố; xem các lỗi khác để biết chi tiết Tuy nhiên, "Không phải URL hợp lệ" phải là chuỗi tìm kiếm đủ tốt. Chỉ cần không quan tâm, có cách nào tốt hơn để tập lệnh phân tích kết quả hơn tìm kiếm đầu ra văn bản cho chuỗi "URL không phải là hợp lệ" không? – Andy

+0

Với các thông báo lỗi khác nhau có thể xây dựng khác nhau của svn có thể cung cấp cho, bạn nên xem xét để phân tích chuỗi đầu ra cho một mô hình tích cực hơn là một tiêu cực. Đó là, thử nghiệm cho sự xuất hiện của một cái gì đó bạn sẽ không nhận được khi repo không tồn tại. Ở đây, CollabNet SVN 1.6.1 (Windows) cung cấp khả năng bật đầu ra xml thông qua tham số '--xml'. Cá nhân tôi chỉ cần kiểm tra sự tồn tại của phần tử UUID, nên được bao gồm trong bất kỳ dữ liệu 'info' nào (đúng với tôi nếu không). – amain

+0

Cảm ơn bạn. Chúng tôi thậm chí không có máy chủ 1.5.0 chạy được nêu ra, vì vậy tôi sẽ ghi lại bình luận của bạn và đặt điều này trong danh sách công việc phải làm. – Andy

40

Thay vì kiểm tra cho chuỗi trở lại tôi chỉ sẽ kiểm tra cho mã trở lại:

cả

svn ls REPOSITORY/PATH 

svn info REPOSITORY/PATH 

return 0 nếu mọi việc đều tốt, và 1 nếu mọi thứ sai; bạn có thể nhanh chóng kiểm tra xem nó ra:

echo $? 

như vậy trong một kịch bản bash chỉ làm điều gì đó như:

error=$? 
if [ $error -ne 0 ]; then 
     YOUR ERROR HANDLING 
fi 

công trình như một điều trị!

+0

Cảm ơn bạn đã bình luận. Thậm chí có thể làm điều đó ở giữa một kịch bản Perl hay không. Trong mọi trường hợp, điều này đã trở thành một câu hỏi học thuật như dự án tôi đang làm việc đã bị loại bỏ! – Andy

+1

xin lỗi cho dự án của bạn! hy vọng câu trả lời này sẽ hữu ích cho người khác .. – Stefano

+3

Điều này sẽ được đánh dấu là câu trả lời đúng – MatteoSp

2

Tôi phải đối mặt với vấn đề trên và tôi đã thử mọi cách. không làm việc cho tôi .. nếu chúng ta truy cập svn với một đường dẫn không trong svn nó không thành công với lỗi và kịch bản shell sẽ phá vỡ.

Thay vì truy cập đường dẫn không xác định, những gì tôi đã làm là lấy danh sách thư mục của thư mục mẹ và kiểm tra xem có khớp hay không.

Nhận tất cả các dự án tạo thư mục cha của bạn (nếu bạn muốn tìm một thẻ cụ thể sau đó đường dẫn thư mục mẹ của bạn nên được https://developernetwork.repo.net/svn/Projects/Calculator/tags)

projects=$(svn ls https://developernetwork.repo.net/svn/Projects/) 

sau đó kiểm tra thư mục dự án của bạn tồn tại. Hãy nhớ thêm / sau tên dự án của bạn.

projectName="Calculator/" 
for i in $projects; do 
    if [ "$i" == "$projectName/" ]; 
     then 
     echo Project Exist 
     else 
     echo Project does not exist 
    fi 
done 

đơn giản.

1

Tôi đã nhận xét về câu trả lời hiện có nhưng tôi không có đủ danh tiếng.

Tôi muốn tìm xem tệp đã được nhập thành công hay chưa, vì vậy tôi đã thử "svn info" và "svn ls" với "echo $?". Tôi chỉ có thể nhận được mã trả về số không/không bằng 0 khi tôi sử dụng "svn ls": "thông tin svn" luôn trả về số không.

Đây là phiên bản lật đổ 1.5.5 trên Redhat RHEL6.

0

Giống như @A Scott nói, không thể sử dụng echo $? để biết thời điểm URL chính xác (tôi đang ở trên Mac OS 10.11 và SVN client 1.9.5).

Đối với độc giả tiềm năng trong tương lai, tôi sử dụng workaround này:

content=$(svn info $SVN_TAG_URL) 

if [[ -z $content ]]; then 
    echo "The SVN URL doesn't exist"; exit 
fi 
Các vấn đề liên quan