Tôi có một móc trước cam kết cho SVN chạy chương trình kiểm tra lỗi và hủy bỏ cam kết trong trường hợp có vấn đề. stderr được chuyển hướng đến người dùng bắt đầu cam kết trong trường hợp có vấn đề. Nhưng tôi muốn gửi đầu ra của người dùng từ chương trình kiểm tra lỗi ngay cả khi không tìm thấy vấn đề nào, để người dùng được thông báo rằng trình kiểm tra lỗi đã chạy và không thấy vấn đề gì. Làm thế nào để làm điều đó với SVN trước cam kết móc?Làm thế nào để gửi stdout cho người dùng khi chạy SVN pre-commit hook
Trả lời
Móc Subversion ăn STDOUT của chúng. Khi kịch bản được chạy, không có STDOUT. Bạn thậm chí không thể có kịch bản trước cam kết gửi STDOUT đến một quá trình khác.
Tuy nhiên bên trong móc trước cam kết, STDOUT vẫn tồn tại và vẫn có thể được chuyển hướng. Ví dụ, hook của tôi bao gồm một kịch bản shell bao gồm một số dòng tiện ích dòng lệnh Unix. Mỗi tiện ích dòng lệnh có một STDIN và một STDOUT, và tôi có thể ống từ một đến khác. Tuy nhiên, khi kịch bản lệnh đó kết thúc thực thi, không có STDOUT.
Điều khác là không có cách nào để giao tiếp STDOUT thông qua mô hình móc. Subversion không cung cấp bất kỳ loại liên kết truyền thông nào. Có một liên kết cho STDERR, nhưng chỉ khi bản thân móc thất bại. Đây là một móc trước khi cam kết, tôi nghi ngờ bạn cố ý muốn thất bại móc này chỉ để cung cấp cho người dùng báo cáo.
Những việc bạn có thể làm là sử dụng các phương thức thông báo khác. Một số người đã đề xuất email. Bạn có thể chạy tập lệnh hậu cam kết để tạo báo cáo và gửi email báo cáo đó dựa trên địa chỉ email của người dùng. Tôi sẽ không làm điều này như là một kích hoạt trước cam kết bởi vì bạn không muốn giao dịch thất bại vì báo cáo không hoạt động.
Một số người đã đề xuất rằng bạn có thể ánh xạ người dùng đã thực hiện cam kết bằng địa chỉ email và gửi email cho người dùng. Tôi sẽ không làm điều này vì người dùng sẽ đơn giản bỏ qua email. Họ đã nhận được hàng chục nếu không phải hàng trăm email từ các quy trình khác nhau cảnh báo họ về điều này hoặc điều đó.
Điều tôi khuyên bạn nên sử dụng một sản phẩm như Hudson để thực hiện các bản dựng liên tục và có báo cáo này do Hudson tạo ra và được đăng trên trang xây dựng mà Hudson tạo ra. Bằng cách này, nhà phát triển có thể quay lại và kiểm tra báo cáo. Trong thực tế, Hudson đã có các plugin khác nhau kiểm tra lỗi và tạo ra tất cả các loại báo cáo và đồ thị đẹp mắt (thường làm việc với findbugs hoặc các dự án khác như thế).
Một trong những plugin thú vị hơn là trò chơi giải thưởng điểm để xây dựng thành công, sửa lỗi và cảnh báo, v.v. Nó trình bày bảng dẫn đầu, vì vậy nhà phát triển có thể so sánh điểm số của họ với các nhà phát triển khác. Tôi không bao giờ sử dụng nó, nhưng một số người trong nhóm người sử dụng Hudson nói rằng các nhà phát triển có được rất cạnh tranh về điểm số của họ.
Bạn phải ánh xạ tên người dùng đến địa chỉ email bằng cách nào đó. Sau đó, bạn có thể thu thập đầu ra trong một tập tin và gửi nó đến người nhận.
Trong trường hợp của tôi, tôi đã viết một ứng dụng biểu mẫu C# Windows đơn giản để hiển thị tiến trình của móc.
- 1. Người dùng nào sử dụng git hook?
- 2. PHP - gửi tệp cho người dùng
- 3. Làm thế nào tôi có thể chạy thủ công hook sau khi nhận trên git?
- 4. Làm thế nào để tìm ra khi nào điều khiển được hiển thị cho người dùng?
- 5. Cho phép SVN cam kết với các cảnh báo móc PreCommit hiện có
- 6. Pre Commit Hook cho JSLint trong Mercurial và Git
- 7. Howto ánh xạ SVN Người dùng tới người Jenkins
- 8. người dùng nào chạy người dùng asp.net của tôi?
- 9. Làm thế nào để triển khai Python cho người dùng Windows?
- 10. Làm cách nào để tạo và gửi tệp .zip cho người dùng trong C# ASP.NET?
- 11. Làm thế nào để đảm bảo người dùng chỉ gửi văn bản tiếng Anh
- 12. Người dùng chỉ đọc một lần cho svn
- 13. Làm cách nào để "cấp cho người dùng tạo" dưới dạng người dùng không phải là người dùng root?
- 14. SVN: Lịch sử thanh toán người dùng?
- 15. học svn cho người dùng git có kinh nghiệm?
- 16. Làm thế nào để zip/gzip dữ liệu người dùng trong javascript trước khi gửi đến máy chủ?
- 17. Svn nhận người dùng hiện tại
- 18. Làm cách nào để chạy mã PHP khi người dùng nhấp vào một liên kết?
- 19. Chỉ định người dùng khi gửi email bằng lệnh thư
- 20. Làm cho curl gửi lỗi cho stderr và mọi thứ khác để stdout
- 21. Làm thế nào để chạy ứng dụng Console trong nền (không có giao diện người dùng)?
- 22. Làm thế nào để chạy một người dùng hiện đại trên Internet Explorer?
- 23. Cách gửi tệp cho người dùng bằng carrierwave?
- 24. Làm thế nào để cấp quyền sendmail cho người dùng máy chủ sql?
- 25. Làm thế nào để gửi cảnh báo cho người dùng thông qua plugin mà không sử dụng InvalidPluginExecutionException?
- 26. Sử dụng LDAP để xác thực người dùng SVN
- 27. làm thế nào để hiển thị tùy chọn khi người dùng nhấp vào UITableViewCellAccessoryDetailDisclosureButton
- 28. Làm thế nào để chạy quá trình tổng thể nginx với người dùng khác nhau
- 29. Làm thế nào để thay đổi tên văn bản của người gửi khi gửi thư bằng Swift_Message?
- 30. Gửi email kích hoạt khi người dùng mới đăng ký