«前の日記(2009-01-03(Sat)) 最新 次の日記(2009-01-10(Sat))» 編集

これ日記なん?


2009-01-05(Mon) [長年日記]

_ [ubuntu][mercurial]hgimportsvn, hgpullsvn

mercurialでやってみたかったのが、

  • 中央リポジトリ...Subversion, 手元のリポジトリ...mercurial
  • リモートへのデプロイにmercurialを使う
  • デプロイ先での変更もmercurialに入れて、後で集約する

の3つ。で、最初のやつはhgsvnとかいうのを使うとよいそうなので、早速インストール。

$ sudo apt-get install hgsvn

webistranoを持ってきてみる。

$ hgimportsvn http://labs.peritor.com/svn/webistrano/trunk webistrano

この状態だとソースがなんか古いなあ...hgpullsvnしてみるか?

$ hgpullsvn
...
* svn 'up' '--ignore-externals' '-r' '170' '.'
* hg '--encoding' 'utf-8' 'ci' '-m' '[svn] breadcrumb enhancements' '-u' 'jweiss' '-d' '2008-09-29 18:55:39'
* hg '--encoding' 'utf-8' 'tag' '-l' 'svn.170'
* svn 'up' '--ignore-externals' '-r' '171' '.'
* hg '--encoding' 'utf-8' 'addremove' '-X' '.svn' '-X' '**/.svn' 'app/views/deployments/_list_item.html.erb'
* hg '--encoding' 'utf-8' 'ci' '-m' '[svn] new deployment list' '-u' 'jweiss' '-d' '2008-09-29 20:22:15'
* hg '--encoding' 'utf-8' 'tag' '-l' 'svn.171'
...

え!?リポジトリの履歴を全部持ってきてるってことか!?てことは最初のhgimportsvnってのは、

  • svn のリビジョン1を持ってきて
  • ワークディレクトリに展開

hgpullsvnで

  • リポジトリの履歴を順次持ってくる

ってこと?うーん。今回はそこまでしなくてもいいんだけどな。

単にこういうのでもいいのかな?

  • svn co URL wd でチェックアウトする
  • cd wd; hg init でmercurialの初期化
  • .svn を無視してimport(←やりかたわからん imkk)

(追記) いやいや、svn up はいいとして、mercurial側には都度都度add, removeしなきゃならんのだから手動は厳しいか。やっぱりhgpullsvnか...

(追記2) hg には addremoveっていう一発でやるコマンドがあるのね。なるほど〜

(追記3) hgimportsvnでrevision1を持ってくるのは、trunk(というか、分岐元がないから)だからみたい。svnのブランチを指定すると、ブランチの根元を持ってきた模様。その後hgpullsvnで追いつくと。

(追記4) はっ。ということはsvnのタグを指定してもってくりゃそれでおkなんじゃねーの?hgimportsvnはsvn側のブランチ名と同じhg のブランチを作るようだから、同じhgのリポジトリで複数共存させられるのかも...

_ [ubuntu][mercurial] hgwebdir

~/public_html でCGIが使える、という設定になっている、という前提で。

  • /etc/apache2/mods-enabled/userdir.conf
  • /etc/apache2/mods-enabled/mime.conf

あたりを設定後、sudo /etc/init.d/apache2 restart で。

$ cp/usr/share/doc/mercurial/examples/hgwebdir.cgi ~/public_html/src/index.cgi
$ cd ~/public_html/src
$ vi .htaccess
Options +ExecCGI
DirectoryIndex index.cgi
<Files hgweb.config>
  deny from all
</Files>
$ vi hgweb.config
[paths]
webistrano = /home/kog/development/webistrano
redmine-0.8 = /home/kog/development/redmine-0.8
$ vi ~/development/webistrano/.hg/hgrc
[web]
allow_push =
allow_archive = zip,gz,bz2
style = gitweb

_ [mercurial]svnのブランチをhgimportしてみる

kog@ubu1:~/development/webistrano$ hgimportsvn http://labs.peritor.com/svn/webistrano/branches/1.4/ .
* svn 'info' '--xml' 'http://labs.peritor.com/svn/webistrano/branches/1.4'
* svn 'log' '--xml' '-v' '--stop-on-copy' '-r' '1:202' '--limit' '1' 'http://labs.peritor.com/svn/webistrano/branches/1.4'
SVN branch was copied from '/trunk' at rev 194
* hg '--encoding' 'utf-8' 'branch' '1.4'
* svn 'checkout' '-q' '-r' '202' 'http://labs.peritor.com/svn/webistrano/branches/1.4' './tmpPKPtte'
* svn 'status' '--xml' '-v' '--ignore-externals' '/home/kog/development/webistrano/tmpPKPtte'
* hg '--encoding' 'utf-8' 'addremove' '-X' '.svn' '-X' '**/.svn' 'vendor/plugins/net-ssh-2.0.2/test/transport/test_server_version.rb' 'vendor/rails/acti
...
...
* hg '--encoding' 'utf-8' 'ci' '-m' '[svn] create 1.4 branch' '-u' 'jweiss' '-d' '2008-11-04 04:05:33'
* hg '--encoding' 'utf-8' 'tag' '-l' 'svn.202'
Traceback (most recent call last):
  File "/usr/bin/hgimportsvn", line 8, in <module>
    load_entry_point('hgsvn==0.1.4', 'console_scripts', 'hgimportsvn')()
  File "/var/lib/python-support/python2.5/hgsvn/run/hgimportsvn.py", line 172, in main
    os.rename(os.path.join(checkout_dir, d, ".svn"), os.path.join(d, ".svn"))
OSError: [Errno 39] Directory not empty
kog@ubu1:~/development/webistrano$ hg tip
changeset:   189:826d4254d8c9
branch:      1.4
tag:         tip
tag:         svn.202
user:        jweiss
date:        Tue Nov 04 04:05:33 2008 +0900
summary:     [svn] create 1.4 branch

kog@ubu1:~/development/webistrano$ hg branches
1.4                            189:826d4254d8c9
trunk                          188:613046ddf337 (inactive)
kog@ubu1:~/development/webistrano$ hg update -C trunk
5 files updated, 0 files merged, 0 files removed, 0 files unresolved
kog@ubu1:~/development/webistrano$ hg branches
1.4                            189:826d4254d8c9
trunk                          188:613046ddf337 (inactive)
kog@ubu1:~/development/webistrano$ hg tip
changeset:   189:826d4254d8c9
branch:      1.4
tag:         tip
tag:         svn.202
user:        jweiss
date:        Tue Nov 04 04:05:33 2008 +0900
summary:     [svn] create 1.4 branch

一応これtrunkに向けてupdate -C できてると思うんだけど、hg branchesだとinactive?これどうなってるんだろ?

(追記) hgpullsvnして、ブランチを変えてさらにhgpullsvn。

kog@ubu1:~/development/webistrano$ hgpullsvn
* svn 'info' '--xml' '.'
* svn 'info' '--xml' 'http://labs.peritor.com/svn/webistrano/trunk'
No revisions after 205 in SVN repo, nothing to do
kog@ubu1:~/development/webistrano$ hg update -C 1.4
5 files updated, 0 files merged, 0 files removed, 0 files unresolved
kog@ubu1:~/development/webistrano$ hgpullsvn
* svn 'info' '--xml' '.'
* svn 'info' '--xml' 'http://labs.peritor.com/svn/webistrano/trunk'
No revisions after 205 in SVN repo, nothing to do
kog@ubu1:~/development/webistrano$ hg update -C trunk
5 files updated, 0 files merged, 0 files removed, 0 files unresolved

webistrano側のリビジョンが上がったらためしてみますかね。