2012-01-09 29 views
7

và Chúc mừng năm mới. Đây là một vấn đề khó khăn để phục hồi từ bữa ăn tối Giáng sinh!SVN: Thêm màu sắc trên dòng lệnh svn với awk (in bash)


Đây là một phần của mã Bash (tôi đặt nó trong .bashrc tập tin) Mà làm việc:

function svn { 
    command svn "[email protected]" | awk ' 
    BEGIN { 
    cpt_c=0; 
    } 
    { 
    if  ($1=="C") { 
     cpt_c=cpt_c+1; 
     print "\033[31m" $0 "\033[00m"; # Conflicts are displayed in red 
    } 
    else if ($1=="A") { 
     print "\033[32m" $0 "\033[00m"; # Add in green 
    } 
    else if ($1=="?") { 
     print "\033[36m" $0 "\033[00m"; # New in cyan 
    } 
    else if ($1=="D") { 
     print "\033[35m" $0 "\033[00m"; # Delete in magenta 
    } 
    else    { 
     print $0;      # No color, just print the line 
    } 
    } 
    END { 
    print cpt_c, " conflicts are found."; 
    }'; 
} 

này một phần của mã thực hiện chính xác những gì tôi muốn. Các chức năng svn (trạng thái, cập nhật, vv) được in với màu sắc. Đối với nhu cầu nội bộ, tôi không muốn cài đặt những thứ như colorsvn hoặc svn-color.

Dưới đây là một ví dụ về đoạn code trên: (không có uy tín enought để đăng hình ảnh)

svn command displayed in colors

Và một lần nữa, đó là một cách hoàn hảo những gì tôi muốn. Vấn đề xảy ra khi xung đột được tìm thấy (ví dụ khi tôi cập nhật): thực sự, khi một tệp bị xung đột, svn được chuyển giao cho người dùng, để cho anh ta nhập một vài chữ cái (xem bên dưới)

# svn update 
Conflict discovered in 'test.txt'. 
Select: (p) postpone, (df) diff-full, (e) edit, 
     (mc) mine-conflict, (tc) theirs-conflict, 
     (s) show all options: 

Có cách nào để làm cho người dùng gõ một cái gì đó (ví dụ: ví dụ e, mở trong VIm tập tin xung đột), làm điều gì đó (chẳng hạn xóa một số dòng sau loại e, sau đó lưu & quit), và nhập một chữ khác để xác nhận xung đột giải quyết, sau đó cuối cùng sẽ hiển thị bước tiếp theo của cập nhật svn (các tệp khác, v.v.)?

Nói cách khác, tôi muốn "tạm dừng" tập lệnh hiển thị màu để cho phép người dùng tương tác với svn, sau đó cập nhật svn tiếp tục. Tôi nghĩ rằng nó sẽ rất hữu ích cho tương lai để biết làm thế nào có thể để awk tạm dừng các kịch bản người gọi, sau đó tiếp tục!


Tôi đã làm cho bản thân mình đủ rõ ràng chưa? Tiếng Anh của tôi không tốt như tôi muốn:/

Nếu bạn cần chi tiết, vui lòng hỏi!

+3

Lệnh 'svn' của bạn vẫn nhận được đầu vào của bạn. Có những công cụ như 'mong đợi' để chuyển đổi giữa thực thi tự trị và tương tác, nhưng nó có thể hơi khác bên cạnh điểm ở đây. Giải pháp chính xác là một trình bao bọc cấp thấp hơn, tôi đoán giống như những gì bạn nói bạn không muốn sử dụng. Script awk của bạn nhận được frim đầu vào của nó một đường ống nhưng bạn có thể có thể hack một cái gì đó trong để thêm một chế độ mà nó đọc đầu vào bổ sung từ '/ dev/tty' hoặc một số như vậy. – tripleee

+0

Bạn có muốn mở rộng hàm bash của bạn 'svn' để xử lý tất cả điều này, hay bạn hình dung rằng việc 'tạm dừng' bắt buộc là mã riêng biệt sau khi hàm' svn' đã chạy? Ngẫu nhiên tiếng anh của bạn là tốt! Chúc may mắn. – shellter

+0

@shellter: Vâng, tôi muốn mở rộng chức năng bash của tôi, nó sẽ là tốt nhất. Nhưng tôi mở tất cả các giải pháp có thể;) Ty cho tiếng anh của tôi! –

Trả lời

3

Bạn có cố gắng chạy svn update --accept postpone để svn không nhắc cho các cuộc xung đột?

+0

Con người, đây là HOÀN THÀNH. Không có thêm lời nhắc cho xung đột ...Vì vậy, tôi có thể giữ toàn bộ kịch bản của mình! Cảm ơn rất nhiều, điều đó là hiển nhiên nhưng tôi không tìm ra! –

+1

LƯU Ý: để tránh ** TẤT CẢ các lệnh nhắc SVN **, tốt hơn là sử dụng tùy chọn '--non-interactive' (cho bất kỳ tiểu mục SVN nào). –

0

Đây là giải pháp đơn giản và an toàn (được thử nghiệm với tập lệnh của bạn). Bởi vì svn chỉ đơn giản gọi

system(getenv("SVN_EDITOR")) // or something similar 

bạn chỉ có thể làm như sau (trong bash, điều chỉnh cho vỏ khác):

export SVN_EDITOR="</dev/tty >&/dev/tty vi" 

Sau đó bạn sẽ có thể làm các chỉnh sửa, và tiếp tục chương trình màu của bạn từ awk.

Tôi không biết liệu tính năng này có hoạt động với các trình chỉnh sửa khác hay không nhưng tôi hy vọng nó có hiệu quả. Nó nên được đưa ra là chuyển hướng tiêu chuẩn.

+0

Tôi sẽ làm một số thử nghiệm cuối tuần này, và cho bạn biết những gì đang xảy ra, cảm ơn! –

2

Mặc dù không đặc biệt trả lời câu hỏi của bạn - Tôi đã tạo một bản sửa đổi và phiên bản nhỏ của tập lệnh mà tôi bỏ qua awk khi chạy svn commit. Hơn nữa, tôi đã thêm nhiều màu hơn cho một số loại đầu ra nhất định. Kịch bản có sẵn trực tuyến - vui lòng cam kết thay đổi của bạn.

+0

Chà, tôi cảm thấy hơi tâng bốc! Đó là tốt, bạn thêm một số màu sắc. Nhưng như tôi đã nói, trong trường hợp tập tin là mâu thuẫn trong một cập nhật svn, tôi nghĩ rằng bạn sẽ có cùng một vấn đề tôi có: 'Xung đột được phát hiện trong 'offres.php'. Chọn: (p) trì hoãn, (df) khác biệt đầy đủ, (e) chỉnh sửa, (h) trợ giúp để có thêm tùy chọn: ' –

+0

Thiết lập của tôi khác. Tôi đang sử dụng một kho 'svn' và một kho' git' song song. Xung đột chỉ được giải quyết thông qua 'git'. Mỗi lần tôi cam kết vào 'svn' tôi sẽ không có bất kỳ xung đột nào. - Tôi sẽ cần thiết lập một số dự án thử nghiệm để tái tạo xung đột của bạn. Không có hành vi phạm tội! Tôi sử dụng kịch bản của bạn vì lý do ích kỷ "màu". Tuy nhiên, tôi có thể xem xét vấn đề của bạn vào tháng 3 sớm nhất vì tôi sẽ đi nghỉ mát trong thời gian chờ đợi. – JJD

+1

Cuối cùng, 4+ năm sau, tôi đã quyết định chia sẻ phiên bản đoạn mã này thông qua GitHub, giống như bạn đã làm trong quá khứ;) Tôi đã thực hiện nhiều cải tiến, vì vậy nếu có ai quan tâm, hãy xem [ phiên bản cập nhật này của beautifulSVN] (https://github.com/4wk-/beautifulSVN) –

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