前回できなかったライセンス更新ができるようになった。
成果物
GitHub.Upload.ByPython.License.Insert.201703161736
開発環境
- Linux Mint 17.3 MATE 32bit
- SQLite 3.8.2
- Python 3.4.3
前回まで
http://ytyaru.hatenablog.com/entry/2017/08/07/000000
http://ytyaru.hatenablog.com/entry/2017/09/01/000000
今回
- LICENSEを更新できない
- 初回コミット時にLICENSEファイルを入れなかったら、DB上ではずっとライセンス無しの扱いになる
前回の問題を解決した。git add
時にライセンスファイルがあるとき、ライセンス情報を取得しなおして更新する。
git addファイル一覧を取得する
git add -n .
の結果をファイル一覧として配列型で受け取りたい。
Pythonでコマンド実行し、標準出力をstrとして受け取る。
subprocess.Popen().communicate()
を使う。
http://qiita.com/mokemokechicken/items/a84b0aa96b94d1931f08
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stdout=subprocess.PIPE)
stdout_data, stderr_data = p.communicate()
改行
# 改行コードを'\n'に統一する stdout_data = stdout_data.replace('\r\n', '\n') stdout_data = stdout_data.replace('\r', '\n') # 最終文字の'\n'を削除する stdout_data = stdout_data[:-1]
OSごとに異なる改行コードを\n
に統一して扱う。
配列にする
files = [] for line in stdout_data.split('\n'): if 0 < len(line): files.append("./" + line.replace("add '", "")[:-1])
\n
で分割する。
また、パスにするため以下のように文字列操作する。
更新ルート
リポジトリのライセンスを挿入&更新するルートは3通りある。
- 該当リポジトリのライセンスレコード
- 存在しない:
- 存在する:
git add
一覧にライセンスファイル- 含まれている:
- 含まれていない: <なにもしない>
- 含まれている:
- 存在しない:
補足
addファイルが1つもないとき
add,commit,pushするファイルがありません。
上記のメッセージを表示し、何もしない。
これまではadd,commit,pushコマンドは結果的に何もしなかった。しかし、プログラミング言語とサイズのAPI問い合わせが実行されてしまっていた。無駄なので何もしないよう変更した。
気づいたこと
git rename
しないとリネームしたらgitで管理できなくなる(別ファイル扱いになる)LICENSE
とLICENSE.txt
ではGitHubサイト上での表示が異なる(LICENSE
のほうがリッチ)
所感
思いの外、大変だった。