Wednesday, August 16, 2006

Visual SourceSafe to Subversion migration - part 2

Lỗi "Invalid copy source path"

Để không phải load các thư mục cũ được tạo ra trong quá khứ nhưng không còn tồn tại, dumpfile được lọc qua lệnh svndumfilter. Lỗi thường gặp khi chạy lệnh này là "Invalid copy source path" có nguồn gốc tương tự như trên. Hậu quả là "rác" từ dumpfile không thể bỏ đi được mà cũng không thể xài được.

svndumpfilter3 tương tự như svndumpfilter nhưng được viết bằng python (2.4) cho phép ignore lỗi "Invalid copy source path" để chạy tiếp. Xem như lọc được bớt "rác" không cần thiết từ dữ liệu cũ.

Lỗi "File not found"

Khi load dumpfile kết quả của vss2svn với lệnh "svnadmin load" lỗi thường gặp là: "File not found: transaction ...". Lỗi này thường gây ra do một node được tạo ra với action "change" nhưng lại không được "add" trong một revision trước đó. Hậu quả là lệnh load bị hỏng giữa chừng.

Lỗi "File not found" thì phải xử lý bằng tay, mẹo là thay action "change" thành "add" đối với node gây ra lỗi. Cách làm là tìm ra số thứ tự của dòng (line number) mô tả action cho node gây lỗi (Node-action), thay thế "change" bằng "add", tiếp tục lệnh load. Để tìm ra số thứ tự dòng của node gây lỗi có thể dùng "grep -n" hoặc "less -N", sau đó có thể pipe trực tiếp qua sed để xử lý. Ví dụ:

# cat vss2svn-dumpfilter.txt | sed -e '12345678s/change/add' | svnadmin load /var/svn/project

Hơi thủ công tí nhưng rốt cuộc cũng load được hết dumpfile, kết quả còn hạ hồi phân giải.

Sunday, August 13, 2006

Visual SourceSafe to Subversion migration - part 1

Chuyển sang sử dụng OSS để giảm chi phí bản quyền, Subversion được lựa chọn là SCM chuẩn để thay thế cho Visual SourceSafe. Người dùng yêu cầu data phải được "di dời" (migrate) hoàn toàn từ VSS sang SVN, giữ được toàn bộ history. Yêu cầu hoàn toàn chính đáng nhưng lại gây đau khổ cho nhóm phụ trách "di dời".

Công cụ để migrate ngó qua ngó lại cũng chỉ có vss2svn là tốt nhất. vss2svn làm việc rất tốt với các VSS database "sạch", nguyên vẹn (không có file data nào bị hư hỏng). Nhưng với database có file data bị hỏng, quá trình load ngược vào SVN repository hầu như chắc chắn sẽ bị lỗi. Nếu lỗi xảy ra ở các revision "xa xưa" thì cơ hội để sửa được càng ... xa vời. Hiện có một VSS database 2GB với 4600 revision load được một nửa thì bị lỗi. Chẳng lẽ bó tay sao?

Mẹo xài proxy với Perl CPAN

Có những lúc cần phải cài ngay CPAN module để thử những tool viết bằng Perl. Search CPAN rồi download thì ... thủ công quá, xài shell của PAN thì proxy công ty không cho FTP nên không lấy được MIRROR list, thế là đứng ngắc. May quá, có Life with CPAN hướng dẫn cách thêm các site xài HTTP vào urllist để có thể chạy với proxy không cho FTP. Cách làm như sau:
  • Vào http://www.cpan.org/SITES.html chọn một số site chạy HTTP ở đâu đó gần gần với ISP của mình
  • Thêm site vào trong urllist của cấu hình CPAN
# perl -MCPAN -eshell
cpan> o conf urllist push http://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/
cpan> o conf urllist push http://ftp.cpan.jp/
cpan> o conf commit


Giờ đây có thể install CPAN module ào ào với proxy.