LoginSignup
6

More than 5 years have passed since last update.

bitbucketのwikiで議事録を管理、Home.mdに逆順にソート・リンクしたい人の為のスクリプト

Last updated at Posted at 2014-06-24

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);
    }

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6