読者です 読者をやめる 読者になる 読者になる

opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

リモートなmercurialリポジトリを作る2

昨日作ったリモートなmercurialリポジトリを少し改善して、リポジトリの作成、削除、一覧をローカルから1コマンドで見れるようにしてみた。

リモートのmercurialユーザーにシェルスクリプトを配置

やることは簡単でローカルマシンからリモートのユーザーでコマンドを実行させるだけ。

setenv HG_REPO $HOME/repo

という具合にリポジトリのディレクトリをtcshrcか何かに書いておく。
とりあえず3つほどシェルスクリプトを書いたのでそれをmercurialユーザーのPATHが通ってる場所に配置。今回は$HOME/local/binに配置してPATHを通した。

setenv PATH $HOME/local/bin:$PATH

リポジトリを作るcreaterepoコマンドを作る

#!/bin/tcsh

if($#argv != 1) then
    echo "invalie argument"
    exit 1
endif

set PROJECT_NAME=$1

if(-d $HG_REPO/$PROJECT_NAME) then
    echo "Already exists"
else
    mkdir $HG_REPO/$PROJECT_NAME && hg init $HG_REPO/$PROJECT_NAME
    echo "[hooks]\nchangegroup = hg update >&2" > $HG_REPO/$PROJECT_NAME/.hg/hgrc
    echo "Finsihed"
endif

リポジトリを削除するdeleterepoコマンドを作る

実際にはいきなり消すと間違う可能性があるので、バックアップディレクトリに圧縮して待避させるというコマンド。

#!/bin/tcsh

set TARGET=$HG_REPO/$1
set BACKUP=$HOME/backup/removed #バックアップ先

if($#argv != 1) then
    echo "invalid argument"
    exit 1
endif

if(-d $TARGET) then
      cd $HG_REPO
      if(-f $BACKUP/$1-backup.tar.bz2) then
    rm -f $BACKUP/$1-backup.tar.bz2
      endif
      tar cfj $BACKUP/$1-backup.tar.bz2 $1 &&rm -fr $1
      echo "Finished"
else
      echo "$1 repository doesn't exist"
endif

リポジトリの一覧を表示するだけのlsrepo

#!/bin/tcsh

ls $HG_REPO

ローカルから呼び出せるようにする

sshコマンドは、指定したコマンドを実行させることができるが、毎回sshを打っていては長いのでこちらもスクリプト化して見る。

#!/bin/tcsh

set KEY_FILE=$HOME/.ssh/id_ecdsa # remoteのmercurialユーザーの鍵
set DOMAIN="hostname.here.com"
set PORT=22

if($#argv < 1) then
    echo "input error"
else
    ssh -i $KEY_FILE -l mercurial -p $PORT $DOMAIN $argv[*]
endif

このファイルをPATHを通して、hgrepoとか適当な名前を付けて保存する。
そうすると、ローカルユーザーから以下のようにして呼び出せる。

$ hgrepo lsrepo
$ hgrepo createrepo agepoyo
$ hgrepo deleterepo agepoyo

これでターミナルでリポジトリの作成、削除も可能になった。

終わりに

個人的にはシェルスクリプトtcshが書きやすいと思う。

Firefox ブラウザ無料ダウンロード