用遞歸方法掃描 SVN 倉庫下載符合條件的文件

最近在做一個自動化測試工具,需要對一組程序進行測試確認,而這組程序有多個不同平臺的版本,而且後續可能會更新。自然地,就想到在執行測試時從 SVN 存放位置拉取對應的下來進行測試。但 SVN 客戶端移植到嵌入式系統是一個問題,問題二是 SVN 客戶端的授權問題自動化處理不好弄。於是退而求其次,製作一個腳本方便地拉取到 Ubuntu 然後自動化傳送到嵌入式板卡執行測試。

以下分享其中一段的實現,採用了遞歸的方法掃描特定 SVN 路徑下的所有文件,把屬於指定平臺的程序 export 下來。是的,Bash 也支持遞歸。

這段代碼有幾點需要注意:

  • 第 3 行,影響 for 循環從數組中提取文件名,如果不配置這個換行,文件名中存在空格的情況將會出錯。一個文件名被分割爲兩個數組元素了。
  • 遞歸函數內部用到的變量都需要聲明爲 local,因爲默認都是全局的,在遞歸中將會被重複修改,出現問題。
  • 使用 svn 的 list 子命令進行查詢掃描,使用 export 子命令進行文件下載。
#!/bin/bash
set -e
IFS=$'\n'

DEMOS_URL="https://192.168.1.199/svn/tl-linux-applicationRS/2-demos"

function list() {
    local URL=$1
    local DIRS=$(svn list ${URL})
    for dir in ${DIRS[*]}; do
        if echo ${dir} | grep "am437x$" > /dev/null;then
            echo "Exporting ${dir}..."
            svn export ${URL}/${dir}
        fi

        # Check if a directory end with '/'.
        if echo ${dir} | grep "\/$" > /dev/null;then
            local NEW_URL="${URL}/${dir}"
            list ${NEW_URL}
        fi
    done
}

list ${DEMOS_URL}

2020年2月20日

發佈了100 篇原創文章 · 獲贊 64 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章