ฉันใช้คำตอบของ Wim Coenen และเขียนสคริปต์ต่อไปนี้เพื่อสร้างรายการการแก้ไขทั้งหมด:
getSvnRevs() {
cd "$1"
wcver="$(svnversion)"
[ -n "$wcver" ] || panic "Unable to get version for $wcdir"
echo "$1: $wcver"
svn propget svn:externals -R | while read a b c d e; do
[ -n "$a" ] || continue
if [ "$b" = "-" ]; then
wcparent="$a"
wcdir="$wcparent/$c"
[ -z "$e" ] || panic "Invalid format #1"
else
[ -n "$wcparent" ] || panic "Invalid format #2"
wcdir="$wcparent/$a"
[ -z "$c" ] || panic "Invalid format #3"
fi
[ -d "$wcdir" ] || panic "Invalid directory: $wcdir"
wcver="$(svnversion "$wcdir")"
[ -n "$wcver" ] || panic "Unable to get version for $wcdir"
echo "$1/$wcdir: $wcver"
done
}
โชคดีที่ฉันไม่มีสิ่งภายนอกที่ซ้อนกันดังนั้นฉันจึงไม่ต้องทดสอบสิ่งนี้และฉันเดาว่ามันจะไม่ได้ผล แต่ถ้าคุณต้องการสิ่งนี้ก็เพียงพอแล้วที่จะเรียกใช้ฟังก์ชันนี้ซ้ำ นอกจากนี้ฉันไม่เคยทดสอบด้วยชื่อไฟล์ที่ต้องหลบหนี มันน่าจะใช้ไม่ได้แล้ว
การปฏิเสธความรับผิด: ฉันรู้ว่าคำถามเดิมเกี่ยวกับ windows และเชลล์สคริปต์จะไม่ทำงานที่นั่นเว้นแต่คุณจะใช้ cygwin หรือคล้ายกัน