ghq管理下のリポジトリを検索するとき、自分で作ったのから絞り込めるようにした

からの続き。

あれ以来、特に置き場の決まっていないなにかをGithubからcloneするときはghq getして、シェル関数で検索できるようにしています。便利。

しかし、管理下にあるリポジトリが増えるにつれ、自分で作ったリポジトリだけ検索したい場合が増えてきました。

そこで、シェル関数をちょっと弄って、「ghq全体から検索」と「自分で作ったリポジトリの中から検索」を分けてみました。

シェル関数

.bashrcで定義。

参考として、ghq管理下のディレクトリ構成は以下のようになります。

(ghqルートディレクトリ)/(リモートリポジトリのドメイン)/(ユーザ名)/(プロジェクト名)

~/.gitconfigでghqルートディレクトリを指定。

1
2
[ghq]
root = ~/ghq

するとこんな感じ。

~/ghq/github.com/catfist/MyHexo
~/ghq/bibucket.org/catfist/dotfiles

ghq listで検索する場合、ドメインは検索対象になりません。(ユーザ名)/(プロジェクト名)から部分一致検索されます。

1個だけ出力して即cd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 自分で作ったのだけ(find repositories)
fr ()
{
dir=$(ghq list -p "catfist/"|grep -im1 "$(ghq root)/[^/]*/catfist/.*$1.*")
if [ -d "$dir" ]; then
cd "$dir"
pwd
else
echo "ERROR:No hit";
fi
}
# ghq全体(find repositories all)
fra ()
{
dir=$(ghq list -p|grep -im1 ".*$1.*")
if [ -d "$dir" ]; then
cd "$dir"
pwd
else
echo "ERROR:No hit"
fi
}

pecoで絞り込みしてcd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 自分で作ったのだけ(ghq+peco)
gp () {
dir=$(ghq list -p catfist/|grep "$(ghq root)/.*/catfist/.*$1.*"|peco)
if [ -d "$dir" ]; then
cd "$dir"
pwd
else
echo "ERROR:No hit"
fi
}
# ghq全体(ghq+peco all)
gpa () {
dir=$(ghq list -p "$1"|peco)
if [ -d "$dir" ]; then
cd "$dir"
pwd
else
echo "ERROR:No hit"
fi
}