bitbucketのwikiで議事録を管理、Home.mdに逆順にソート・リンクしたい人の為のスクリプト
git+markdownで管理しやすいWikiがないので、職場でbitbucketのプライベートリポジトリで管理しています。
しかし毎回毎回Home.mdにリンクを追加するのも面倒だったので、スクリプト化してみました。
環境
- Mac
- php
デフォルトの命名規則
Y-m-d_title.md (例: 2014-06-24_全体ミーティング議事録.md)
Y-m-d.mdだと日時がタイトルに入ります。
デフォルトの出力
Home.md
# 全ページ
## 2014-06
- [2014-06-24] [全体ミーティング議事録](https://bitbucket.org/username/reposname/wiki/2014-06-24_全体ミーティング議事録)
- [2014-06-21] [全体ミーティング議事録](https://bitbucket.org/username/reposname/wiki/2014-06-21_全体ミーティング議事録)
## 2014-05
- [2014-05-24] [チームミーティング議事録](https://bitbucket.org/username/reposname/wiki/2014-06-24_チームミーティング議事録)
- [2014-05-20] [2014-05-20](https://bitbucket.org/username/reposname/wiki/2014-05-20)
使い方
wikiの.gitフォルダと同じ階層にファイルを置き
Terminal.app
$ php push "commit comment"
と実行するだけです。
コメントが無い場合にはデフォルトで「no comment」がコミットコメントに入ります。
注意
- 命名規則から外れたファイルがあるとバグるかもしれない
- デフォルトでは自動でgit pushまで走ります
- Fetch/Merge等は入れていないので、必要な場合には実装or削除願います。
スクリプト
push
<?php
define("DIR",dirname(__FILE__));
$config = parse_ini_file(DIR."/.git/config",TRUE);
$git_url = str_replace(".git/","/",$config["remote origin"]["url"]);
define("GITURI",$git_url);
$comment = (isset($argv[1])) ? $argv[1] : "no comment";
$files = getFileList(DIR);
if(createHome($files)) {
print "Home.md update!".PHP_EOL;
$output = shell_exec('git add -A 2>&1');
$output .= shell_exec('git commit -m "'.$comment.'" 2>&1');
$output .= shell_exec('git push origin master 2>&1');
print $output;
} else {
print "Home.md update failed!";
}
exit;
function getFileList($dir) {
$list = getMDDesc($dir);
foreach($list as $file_name) {
$meta = explode("_",$file_name);
$result[substr($meta[0],0,7)][] = array(
"file"=>str_replace(".md","",$file_name),
"date"=>str_replace(".md","",$meta[0]),
"title"=>createTitle($meta)
);
}
return $result;
}
function getMDDesc($dir) {
$handle = opendir($dir);
while($file_name = readdir($handle)){
if(is_file($file_name) && $file_name !== "Home.md" && $file_name !== "_template.md" && $file_name !== $_SERVER["PHP_SELF"]) {
$array[] = $file_name;
}
}
closedir($handle);
return array_reverse($array);
}
function createTitle($meta) {
if(isset($meta[1])) {
return str_replace(".md","",$meta[1]);
} else {
return str_replace(".md","",$meta[0]);
}
}
function createHome($list) {
$md = "# 全ページ\n";
foreach($list as $month=>$items) {
$md .= "## {$month}\n";
foreach($items as $item) {
$md .= sprintf("- [%s] [%s](%s/%s)\n",$item["date"],$item["title"],GITURI,$item["file"]);
}
}
return file_put_contents("Home.md",$md,LOCK_EX);
}