1. 程式人生 > >使用ant從版本控制器上取得特定日期的檔案-(task vssget和selector date的使用)

使用ant從版本控制器上取得特定日期的檔案-(task vssget和selector date的使用)

今天接到一個小任務,要求把專案組最近三個月(10,11,12),所有修改過的檔案的程式碼行數統計出來。
程式碼行數統計的工具已經有了,唯一需要的就是要把哪些檔案是在這段特定的時間內修改過的,統計出來。

簡單的試操作了一下,要找到哪些檔案在這個時間段內修改過,估計就必須檢查每一個檔案的history了。
這麼多的檔案,算是一個很費勁的活了。

不過考慮到這個任務的精度要求不高,而且時間是最近的三個月內。
現在也只是剛剛多過了幾天而已,在這段時間內,專案組修改的程式碼很少。

所以考慮取到所有的程式碼,並且取得的時候按照最後更新的日期取得,然後把最後修改時間不在這段時間內的檔案刪除,剩下的檔案就是我要的檔案,用程式碼統計工具統計一把,資料就有了。

按照這個思路操作,考慮了兩種方法。
一種是手動操作,使用vss客戶端獲取程式碼,然後直接在作業系統上把所有的檔案按照搜尋的方式列出來,再按照日期排序,把之前和之後的檔案都刪掉就行。

下圖就是vss的"get Latest Version"的視窗,只要的Set file的地方選擇Modification就可以使取得的檔案是最後cin的日期,否則就會是當前日期了。



第二種是寫點程式碼實現。我這次選擇了ant,好久不用,權當練練手好了。
先寫一個獲取程式碼的target,一定要新增屬性filetimestamp = "modified"

  1. < target name = "getSource" >
  2. < delete dir = "${local.src.dir}" />
  3. < vssget localPath = "${local.src.dir}"
  4. serverPath = "${vss.serverPath.dir}"
  5. ssdir
    = "${vss.executable.dir}"
  6. recursive = "true"
  7. login = "${vss.username},${vss.password}"
  8. vsspath = "${bundle.vss.path}"
  9. filetimestamp = "modified" />
  10. </ target >

再寫一個刪除特定日期的檔案的target,這回使用到了selector date。

  1. < target name = "delFile" depends = ""
    description = "--> description" >
  2. < delete >
  3. < fileset dir = "${local.src.dir}" >
  4. < or >
  5. < date when = "before" datetime = "2008/09/30 23:59:59" pattern = "yyyy/MM/dd HH:mm:ss" />
  6. < date when = "after" datetime = "2008/12/31 23:59:59" pattern = "yyyy/MM/dd HH:mm:ss" />
  7. </ or >
  8. </ fileset >
  9. </ delete >
  10. </ target >