Tôi đang cố gắng xây dựng “ bản đồ nhiệt ” từ lịch sử nhiều năm được lưu trữ trong kho lưu trữ git nơi đơn vị chi tiết là các chức năng riêng lẻ. Chức năng sẽ phát triển nóng hơn khi chúng thay đổi nhiều lần hơn, thường xuyên hơn và với nhiều dòng không trống thay đổi.Làm cách nào để liên kết các dòng đã thay đổi với các hàm trong kho git của mã C?
Như một sự khởi đầu, tôi đã kiểm tra đầu ra của
git log --patch -M --find-renames --find-copies-harder --function-context -- *.c
Tôi nhìn bằng Language.C từ Hackage, nhưng nó dường như muốn có một bản dịch hoàn chỉnh đơn vị — mở rộng tiêu đề và tất cả — thay vì việc có thể để đối phó với một đoạn mã nguồn.
Tùy chọn --function-context
là mới kể từ phiên bản 1.7.8. Nền tảng của việc thực hiện in v1.7.9.4 is a regex:
PATTERNS("cpp",
/* Jump targets or access declarations */
"!^[ \t]*[A-Za-z_][A-Za-z_0-9]*:.*$\n"
/* C/++ functions/methods at top level */
"^([A-Za-z_][A-Za-z_0-9]*([ \t*]+[A-Za-z_][A-Za-z_0-9]*([ \t]*::[ \t]*[^[:space:]]+)?){1,}[ \t]*\\([^;]*)$\n"
/* compound type at top level */
"^((struct|class|enum)[^;]*)$",
/* -- */
"[a-zA-Z_][a-zA-Z0-9_]*"
"|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lL]?"
"|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->"),
Điều này dường như nhận ra ranh giới khá tốt nhưng doesn t ’ luôn rời khỏi chức năng như dòng đầu tiên của hunk diff, ví dụ, với chỉ thị #include
ở trên cùng hoặc với một đoạn có chứa nhiều định nghĩa chức năng. Một tùy chọn để phân biệt để phát ra các khối riêng biệt cho mỗi hàm được thay đổi sẽ thực sự hữu ích.
This isn ’ t an toàn quan trọng, vì vậy tôi có thể chịu đựng một số lỗi. Điều đó có nghĩa là tôi có thể có Zawinski ’ s “two problems”?
Câu hỏi rất thú vị! Cuối cùng một cái gì đó khác hơn là "Tôi mới đến git, làm thế nào để tôi hoàn tác một cam kết?". Chờ cho pháo hạng nặng diễu hành (tức là VonC) :) – ralphtheninja
Bạn vui lòng xác nhận ngôn ngữ nguồn là C hoặc C++? – gbulmer
@gbulmer Ngôn ngữ nguồn là C. 'git diff' sử dụng cùng một mẫu bên trong để nhận ra các định nghĩa hàm trong C và C++. –