特定のリポジトリからの分割のコンバートでコンバート後のリポジトリで hg logを実行するとチェンジセットが一つ(0)しかなくなってします。

79 views
Skip to first unread message

ohira

unread,
Aug 10, 2015, 6:08:16 AM8/10/15
to mercurial-ja
おおひらです。

特定のリポジトリからの分割のコンバートでコンバート後のリポジトリで
hg logを実行するとチェンジセットが一つ(0)しかなくなってします。

hg convertを使ってmercurialからmercurialへのコンバートを行おうとしています。

目的は特定のディレクトリだけ別のリポジトリとして切り出すことです。

特定のディレクトリだけ切り出したリポジトリで hg logと打ってみると
履歴がなくなっていました。

試しに他のリポジトリで試したり、同じ元リポジトリから他のディレクトリを
切り出したりしてテストしたところ履歴がなくなる現象は再現しませんでした。

hg verifyでもエラーがでませんし、コンバートの実行時にもエラーが出てないと思います。

やり方が悪いのなら他のディレクトリでも同じ結果になりそうなものですが
他のリポジトリや同じリポジトリでもディレクトリが違うと発生しないし
履歴が無くなったリポジトリのコンバートを試すとやっぱりなくなるんです。

どのあたりを確認すべきでしょうか?

Kaz Nishimura

unread,
Aug 10, 2015, 10:14:25 AM8/10/15
to mercurial-ja

filemap はどのような内容ですか? と元リポジトリーのディレクトリー階層はどうなっていますか? という質問を書くぐらいしかないですかね。


2015年8月10日(月) 19:08 ohira <shin....@gmail.com>:
--
from Mercurial 日本語コミュニティ <mercur...@googlegroups.com>
※ ヘルプ表示は http://groups.google.com/group/mercurial-ja?hl=ja
---
このメールは Google グループのグループ「mercurial-ja」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには mercurial-ja...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

Katsunori Fujiwara

unread,
Aug 10, 2015, 8:10:46 PM8/10/15
to mercurial-ja
藤原です。

とりあえず、思い付く範囲で、コーナーケースっぽい原因を挙げて見ます。

- ワイルドカード等のパターン指定不可な filemap でパターン指定している

.hgignore やコマンドラインでの指定と異なり、filemap はパターン
指定ができません。

ディレクトリ指定で対応できないケース(例: 特定ファイルのみの除
外) では、ファイル名の直接列挙等での回避が必要です。

- 非 ASCII なファイル名を filemap に記載している

実装を見て、ちょっと気になったので確認してみたら、非 ASCII 文
字が含まれる場合は、ファイル名を引用符 (" や ') で囲まないと、
上手く機能しない感じですね。

また、一番可能性の高い「パターンが不適切」なケースに関しては、変換
元の "hg manifest --all" 出力等と比較して、文字大小を含めて、ファ
イル名なりディレクトリ名なりが、完全一致していることを確認してくだ
さい。



2015年8月10日 23:14 Kaz Nishimura <kaz...@vx68k.org>:
--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

ohira

unread,
Aug 10, 2015, 9:05:16 PM8/10/15
to mercurial-ja
 
 おおひらです。

filemapは以下のような感じです。
ファイル名やディレクトリにはアスキー文字しか使っていません。

hg convert --filemap filemap1 srcrepo dir1

filemap1
include path1/dir1
rename path1/dir1 .


Katsunori Fujiwara

unread,
Aug 10, 2015, 10:05:48 PM8/10/15
to mercurial-ja
藤原です。

2015年8月11日 10:05 ohira <shin....@gmail.com>:
以下のような2段階の手順で変換した場合、各変換後の履歴は期待通りに
なりますか?

1. "include path1/dir1" のみの filemap で変換
2. "rename path1/dir1 ." のみの filemap で変換

もしも (1) の段階で駄目なのであれば、変換元の履歴ツリー上に、変換
を妨げる何らかの要因があるとか、あるいは未知の障害が顕在化した可能
性がありますね(前者の場合でも、なんらかのエラー/警告表示の追加は
必要そう)。

(2) の段階で駄目な場合は……うーん、ぱっと思い付くような原因は無い
ですねぇ。

いずれの場合も、-v/--debug 等で内部情報の表示をさせた際に、何か有益
な情報が採取てきると良いのですが……

--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

ohira

unread,
Aug 10, 2015, 10:28:05 PM8/10/15
to mercurial-ja
  1. "include path1/dir1" のみの filemap で変換 
履歴がなくなっていました。

  2. "rename path1/dir1 ." のみの filemap で変換 
こちらだけやってみると、全体がコンバートされ一部のディレクトリが
リネームされた状態で履歴は残っていました。


Yuya Nishihara

unread,
Aug 10, 2015, 10:30:04 PM8/10/15
to mercur...@googlegroups.com
On Tue, 11 Aug 2015 11:05:47 +0900, Katsunori Fujiwara wrote:
> 2015年8月11日 10:05 ohira <shin....@gmail.com>:
> > filemapは以下のような感じです。
> > ファイル名やディレクトリにはアスキー文字しか使っていません。
> >
> > hg convert --filemap filemap1 srcrepo dir1
> >
> > filemap1
> > include path1/dir1
> > rename path1/dir1 .
>
> 以下のような2段階の手順で変換した場合、各変換後の履歴は期待通りに
> なりますか?
>
> 1. "include path1/dir1" のみの filemap で変換
> 2. "rename path1/dir1 ." のみの filemap で変換
>
> もしも (1) の段階で駄目なのであれば、変換元の履歴ツリー上に、変換
> を妨げる何らかの要因があるとか、あるいは未知の障害が顕在化した可能
> 性がありますね(前者の場合でも、なんらかのエラー/警告表示の追加は
> 必要そう)。

履歴の途中でファイル名の case が変わってたりしないですか?
例えば、 path1/dir1 を Path1/Dir1 へリネームしたとか。
Message has been deleted

ohira

unread,
Aug 10, 2015, 10:46:19 PM8/10/15
to mercurial-ja
おおひらです。

ディレクトリ名の変更は行っています。

今回コンバートのテストを行っているpath1 やdir1は
元々違う名前のものを hg rename で変更したものです。

Toshi MARUYAMA

unread,
Aug 10, 2015, 11:52:20 PM8/10/15
to mercur...@googlegroups.com
まるやまです。
変更前のディレクトリ名もincludeに含めれば履歴はコンバートされます。

コンバート元:
https://bitbucket.org/redmine/redmine-trunk

filemap
```
include lib/plugins/acts_as_activity_provider
rename lib/plugins/acts_as_activity_provider .
```
https://bitbucket.org/marutosi/hg-ja-201508-convert-dir-1

filemap
```
include vendor/plugins/acts_as_activity_provider
include lib/plugins/acts_as_activity_provider
rename lib/plugins/acts_as_activity_provider .

```
https://bitbucket.org/marutosi/hg-ja-201508-convert-dir-2

このリビジョンでファイルの移動もコンバートされてます。
https://bitbucket.org/marutosi/hg-ja-201508-convert-dir-2/commits/eea8e1e9d113e8930896e594b3a64c47f474abb1

以上です。


Katsunori Fujiwara

unread,
Aug 11, 2015, 12:04:07 AM8/11/15
to mercurial-ja
藤原です。

2015年8月11日 11:46 ohira <shin....@gmail.com>:

> ディレクトリ名の変更は行っています。
>
> 今回コンバートのテストを行っているpath1 やdir1は
> 元々違う名前のものを hg rename で変更したものです。

簡単な "hg rename" のケースで、"hg convert" + filemap の動作確認を
行ってみましたが、改名「先」ファイルに関する include 設定のみの
filemap での変換でも、こちらの環境では現象が再現しませんでした。

2度改名するようなケースでも、改名先ファイルの内容を正しく反映した
履歴が、変換先に記録されています。

以下の情報を頂けますか?

- 実行環境+使用Mercurialバージョン

- 以下の様な filemap を使った場合の変換結果

- rename 設定は含めない
- 改名先ファイルに関する従来の inculde 設定はそのまま
- 改名「元」ファイルに関する include 設定を追加

- 変換元における改名操作手順の詳細
(現象を再現可能な、単純化した手順があれば、なお良いです)

--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

ohira

unread,
Aug 11, 2015, 12:50:56 AM8/11/15
to mercurial-ja
  - 実行環境+使用Mercurialバージョン 

実行環境
FreeBSD faith.mxfw.net 10.0-RELEASE-p17 FreeBSD 10.0-RELEASE-p17 #0: Tue Sep 16 14:33:46 UTC 2014     ro...@amd64-builder.pcbsd.org:/usr/obj/usr/src/sys/GENERIC  amd64

使用Mercurialバージョン
Mercurial Distributed SCM (version 3.5+2-79f0cb97d753+20150805)
(see http://mercurial.selenic.com for more information)

Copyright (C) 2005-2015 Matt Mackall and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


  - 以下の様な filemap を使った場合の変換結果 

    - rename 設定は含めない 
    - 改名先ファイルに関する従来の inculde 設定はそのまま 
    - 改名「元」ファイルに関する include 設定を追加 


履歴がコンバートされました
hg convert --filemap filemap2-1 srcrepo dir2

filemap2-1 OK (改名「元」ファイルに関する include 設定を追加)
include path2/dir2
include script/os

コンバートされたファイル一覧(hg locate)
.hgtags
path2/dir2/ec2/sdf.sh
path2/dir2/freebsd/common/boot-loader.conf.sh
path2/dir2/freebsd/common/cvsup-conf
path2/dir2/freebsd/common/dev.cpu.0.freq.sh
path2/dir2/freebsd/common/etc-rc.conf
path2/dir2/freebsd/common/etc-rc.conf.local
path2/dir2/freebsd/common/etc-rc.conf.local.sh
path2/dir2/freebsd/common/fstab.cdrom.sh
path2/dir2/freebsd/common/kern.maxfiles.sh
path2/dir2/freebsd/common/localtime.sh
path2/dir2/freebsd/common/make-kernel-GENERIC.sh
path2/dir2/freebsd/common/make-kernel-MYKERNEL-init.sh
path2/dir2/freebsd/common/make-kernel-MYKERNEL.sh
path2/dir2/freebsd/common/make-world-step1.sh
path2/dir2/freebsd/common/make-world-step2.sh
path2/dir2/freebsd/common/motd-conf
path2/dir2/freebsd/common/munin.d/munin-conf.sh-OLD
path2/dir2/freebsd/common/nextboot-kernel.new.sh
path2/dir2/freebsd/common/nextboot-single-user-mode.sh
path2/dir2/freebsd/common/port-font
path2/dir2/freebsd/common/ports-init.sh
path2/dir2/freebsd/common/ports-kde-4.3.0
path2/dir2/freebsd/common/ports-libtool
path2/dir2/freebsd/common/ports-update.sh
path2/dir2/freebsd/common/pw-user-add-ohira
path2/dir2/freebsd/common/scratch.d/stage_1.conf.ad1
path2/dir2/freebsd/common/scratch.d/stage_1.conf.default
path2/dir2/freebsd/common/scratch.d/stage_1.sh
path2/dir2/freebsd/common/scratch.d/stage_2.conf.default
path2/dir2/freebsd/common/scratch.d/stage_2.sh
path2/dir2/freebsd/common/scratch.d/stage_3.mk
path2/dir2/freebsd/common/xorg-20070519
path2/dir2/freebsd/common/xorg-20070519-conf
path2/dir2/linux/centos/chattr.sh
path2/dir2/linux/centos/chkconfig-del.sh
path2/dir2/linux/centos/chkconfig-off.sh
path2/dir2/linux/centos/chkconfig-on.sh
path2/dir2/linux/centos/etc-init.d-start.sh
path2/dir2/linux/centos/etc-init.d-stop.sh
path2/dir2/linux/centos/etc-modprobe.d-disable-ipv6.conf.sh
path2/dir2/linux/centos/etc-profile.d.sh
path2/dir2/linux/centos/etc-sysconfig-network.sh
path2/dir2/linux/centos/etc-sysctl.conf.sh
path2/dir2/linux/centos/hwclock.sh
path2/dir2/linux/centos/selinux.sh
path2/dir2/linux/centos/sysctl.sh
path2/dir2/linux/centos/upstart.sh
path2/dir2/linux/common/djb/linux.daemontools.sh
path2/dir2/linux/common/djb/linux.djb-errno-patches.sh
path2/dir2/linux/common/djb/linux.djbdns.sh
path2/dir2/linux/common/djb/linux.ucspi-tcp.sh
path2/dir2/linux/common/djb/setup.sh
path2/dir2/linux/common/linux-common-install.sh
path2/dir2/linux/common/munin/init-conf.sh
path2/dir2/linux/common/updatedb/updatedb-conf.sh
path2/dir2/sunos/common/sunos-common-install.sh



履歴がコンバートされません(そのまま)
hg convert --filemap filemap2-2 srcrepo dir2

filemap2-2 NG
include path2/dir2

コンバートされたファイル一覧(hg locate)
path2/dir2/ec2/sdf.sh
path2/dir2/freebsd/common/boot-loader.conf.sh
path2/dir2/freebsd/common/cvsup-conf
path2/dir2/freebsd/common/dev.cpu.0.freq.sh
path2/dir2/freebsd/common/etc-rc.conf
path2/dir2/freebsd/common/etc-rc.conf.local
path2/dir2/freebsd/common/etc-rc.conf.local.sh
path2/dir2/freebsd/common/fstab.cdrom.sh
path2/dir2/freebsd/common/kern.maxfiles.sh
path2/dir2/freebsd/common/localtime.sh
path2/dir2/freebsd/common/make-kernel-GENERIC.sh
path2/dir2/freebsd/common/make-kernel-MYKERNEL-init.sh
path2/dir2/freebsd/common/make-kernel-MYKERNEL.sh
path2/dir2/freebsd/common/make-world-step1.sh
path2/dir2/freebsd/common/make-world-step2.sh
path2/dir2/freebsd/common/motd-conf
path2/dir2/freebsd/common/munin.d/munin-conf.sh-OLD
path2/dir2/freebsd/common/nextboot-kernel.new.sh
path2/dir2/freebsd/common/nextboot-single-user-mode.sh
path2/dir2/freebsd/common/port-font
path2/dir2/freebsd/common/ports-init.sh
path2/dir2/freebsd/common/ports-kde-4.3.0
path2/dir2/freebsd/common/ports-libtool
path2/dir2/freebsd/common/ports-update.sh
path2/dir2/freebsd/common/pw-user-add-ohira
path2/dir2/freebsd/common/scratch.d/stage_1.conf.ad1
path2/dir2/freebsd/common/scratch.d/stage_1.conf.default
path2/dir2/freebsd/common/scratch.d/stage_1.sh
path2/dir2/freebsd/common/scratch.d/stage_2.conf.default
path2/dir2/freebsd/common/scratch.d/stage_2.sh
path2/dir2/freebsd/common/scratch.d/stage_3.mk
path2/dir2/freebsd/common/xorg-20070519
path2/dir2/freebsd/common/xorg-20070519-conf
path2/dir2/linux/centos/chattr.sh
path2/dir2/linux/centos/chkconfig-del.sh
path2/dir2/linux/centos/chkconfig-off.sh
path2/dir2/linux/centos/chkconfig-on.sh
path2/dir2/linux/centos/etc-init.d-start.sh
path2/dir2/linux/centos/etc-init.d-stop.sh
path2/dir2/linux/centos/etc-modprobe.d-disable-ipv6.conf.sh
path2/dir2/linux/centos/etc-profile.d.sh
path2/dir2/linux/centos/etc-sysconfig-network.sh
path2/dir2/linux/centos/etc-sysctl.conf.sh
path2/dir2/linux/centos/hwclock.sh
path2/dir2/linux/centos/selinux.sh
path2/dir2/linux/centos/sysctl.sh
path2/dir2/linux/centos/upstart.sh
path2/dir2/linux/common/djb/linux.daemontools.sh
path2/dir2/linux/common/djb/linux.djb-errno-patches.sh
path2/dir2/linux/common/djb/linux.djbdns.sh
path2/dir2/linux/common/djb/linux.ucspi-tcp.sh
path2/dir2/linux/common/djb/setup.sh
path2/dir2/linux/common/linux-common-install.sh
path2/dir2/linux/common/munin/init-conf.sh
path2/dir2/linux/common/updatedb/updatedb-conf.sh
path2/dir2/sunos/common/sunos-common-install.sh


  - 変換元における改名操作手順の詳細 
    (現象を再現可能な、単純化した手順があれば、なお良いです) 

path2/dir2の方は改名前には履歴が含まれていました、
改名によって履歴が失われているのかもしれません。
(path1/dir1の比較対象としてコンバートのテストを行いました
始めはコンバートできてたのに、なぜか途中からできなくなって
理由がわかりませんでしたが、今回指摘いただいたように
ディレクトリの改名が関係あるのかも)

path1/dir1の方は改名前からすでに履歴がコンバート
できない状態でした。過去の改名が原因と思われます。
(こっちが本来目的としていたコンバートです)


ディレクトリ名の変更の一覧を表示する方法はありませんでしょうか?

Yuya Nishihara

unread,
Aug 11, 2015, 2:28:42 AM8/11/15
to mercur...@googlegroups.com
On Mon, 10 Aug 2015 21:50:55 -0700 (PDT), ohira wrote:
> ディレクトリ名の変更の一覧を表示する方法はありませんでしょうか?

これでどうでしょう?

% hg log -T '{file_copies % "{name}\t{source}\n"}' | sort

Katsunori Fujiwara

unread,
Aug 11, 2015, 3:14:04 AM8/11/15
to mercurial-ja
藤原です。

2015年8月11日 13:50 ohira <shin....@gmail.com>:

> - 実行環境+使用Mercurialバージョン
>
> 実行環境
> FreeBSD faith.mxfw.net 10.0-RELEASE-p17 FreeBSD 10.0-RELEASE-p17 #0: Tue Sep
> 16 14:33:46 UTC 2014
> ro...@amd64-builder.pcbsd.org:/usr/obj/usr/src/sys/GENERIC amd64
>
> 使用Mercurialバージョン
> Mercurial Distributed SCM (version 3.5+2-79f0cb97d753+20150805)
> (see http://mercurial.selenic.com for more information)
>
> Copyright (C) 2005-2015 Matt Mackall and others
> This is free software; see the source for copying conditions. There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

実施条件的には、私の手元の環境と大差なさそうですね。となると、やは
り変換元の履歴固有の問題なのでしょうね。


> - 以下の様な filemap を使った場合の変換結果
>
> - rename 設定は含めない
> - 改名先ファイルに関する従来の inculde 設定はそのまま
> - 改名「元」ファイルに関する include 設定を追加

"hg convert" での変換先に、以前変換先として指定されたことのあるリ
ポジトリを指定した場合、前回までの変換で変換対象となった変換「元」
リビジョンに関しては、変換処理がスキップされます。

継続的な変換を行うような運用であれば、この挙動により、変換元での履
歴増加に対して、二度目以降の変換での処理を軽減することができます。

その一方で、変換元リポジトリにリビジョンが新規追加されない限り、変
換処理が実行されないことになりますから、今回のように、変換に関する
設定のテストを行うような場合だと、あまりよろしくありありません。


例えば、以下の filemap2-1 での変換と:

> 履歴がコンバートされました
> hg convert --filemap filemap2-1 srcrepo dir2
>
> filemap2-1 OK (改名「元」ファイルに関する include 設定を追加)
> include path2/dir2
> include script/os

以下の filemap2-2 での変換が:

> 履歴がコンバートされません(そのまま)
> hg convert --filemap filemap2-2 srcrepo dir2
>
> filemap2-2 NG
> include path2/dir2

共に dir2 を変換先に指定しています。

「履歴がコンバートされません」と記載されている一方で、「(そのまま)」
という追記や、後者の変換後の hg locate 出力の添付がある点から、同
一の dir2 に対して、履歴破棄等を行わずに、そのまま hg convert を実
行しているものと思われます。

この場合、二度の hg convert の間に srcrepo が更新されていないので
あれば、二度目の hg convert で履歴が追加されないのは、変換すべき新
規履歴が srcrepo に無いことが原因であり、filemap の妥当性とは無関
係です。

今回のような、変換挙動に関する動作確認の場合は、以下のように変換リ
ポジトリを都度新規作成するようにしてください。

$ hg convert --filemap filemap2-1 --dest-type hg srcrepo dest2-1
$ hg convert --filemap filemap2-2 --dest-type hg srcrepo dest2-2


> - 変換元における改名操作手順の詳細
> (現象を再現可能な、単純化した手順があれば、なお良いです)
>
> path2/dir2の方は改名前には履歴が含まれていました、

提示のあった filemap2-1 の内容から、「script/os ⇒ path2/dir2」の
改名が行われたであろうことは理解できるのですが、「path2/dir2の方は
改名前には履歴が含まれていました」という表現が少々曖昧で、解釈に悩
んでいます。

ここで言う「改名」というのは、srcrepo における hg rename の話です
よね?

「履歴が含まれていました」というのは、srcrepo における履歴情報の有
無の話ですか?それとも hg convert 結果の変換先リポジトリにおける履
歴情報の有無の話ですか?

また、前者であった場合の「path2/dir2 の履歴」とは「改名前の
script/os の履歴」のことですか?

それとも、script/os からの改名前の段階で、path2/dir2 配下には何ら
かのファイルがあった(以下のような状況?)のでしょうか?

- path2/dir2 配下には、以前からのファイルがある一方で、
script/os 配下のファイルを個別に path2/dir2 配下に移動した?

⇒ 改名以前から path2/dir2 配下にあったファイルが、convert で
無視される状況はおかしい。

「以前から path2/dir2 配下にあったファイルは変換されている
けど、script/os 配下から改名したファイルは変換されていない」
ことを称して、「path2/dir2 配下のファイルが変換されない」と
表現した?

- path2/dir2 配下のファイルの削除と、script/os からpath2/dir2 へ
の改名が実施された?(同一リビジョンで?別リビジョンで?)


> 改名によって履歴が失われているのかもしれません。

ここで言う「履歴が失われている」は、どのような状況を想定されていま
すか?


> ディレクトリ名の変更の一覧を表示する方法はありませんでしょうか?

既に西原さんが返信されてますが、調査用途で使う場合は、改名実施リビ
ジョンの情報も必要でしょうから、"{node|short}" あたりを追加した方
が良いかも?

$ hg log --template "{file_copies % '{node|short} {source} => {name}\n'}"

(テンプレートキーワード "file_copies" のヘルプは、ちょっと修正が
必要だなぁ……)


--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

ohira

unread,
Aug 11, 2015, 3:37:18 AM8/11/15
to mercurial-ja
これでどうでしょう? 

  % hg log -T '{file_copies % "{name}\t{source}\n"}' | sort 

これでばっちりでした。
出力されたファイル名からの変更履歴から
path1/dir1に関係あるものを filemap1に追加することで
コンバート結果に履歴が含まれるようになりました。
rename path1/dir1 . はあっても問題ないようで
最後の状態のパスのもの(path1/dir1)だけ指定すれば良さそうです。

キーワード file_copies に関連するフォーマット文字列は、hg helpでは
表示されないので、たぶんソースで確認するのでしょうね。

ありがとうございます。

Katsunori Fujiwara

unread,
Aug 11, 2015, 3:56:53 AM8/11/15
to mercurial-ja
藤原です。

済みません。壮大に勘違いしてました。

「履歴が無くなった」という言及だったので、「全然変換されない」系の
問題だと早合点してしまっていましたが、元メールを見ると「チェンジセッ
トが "一つ(0)" しかなくなってします」だったんですね…… orz

まぁ、それなら改名絡みしか無いわなぁ……

慌て者のオッチョコチョイとしては、「改名前の履歴が hg convert で引
き継がれない」あたりの表題にしてもらえると助かります(笑) > おおひらさん


2015年8月11日 16:14 Katsunori Fujiwara <flying...@gmail.com>:

ohira

unread,
Aug 11, 2015, 4:21:45 AM8/11/15
to mercurial-ja
はじめに
元のリポジトリの特定のディレクトリを別リポジトリに切り出す処理を行おうとしました。
ところが切り出すディレクトリが少しわかりにくいので、切り出す下準備としてhg rename
を行ってしまったのです。(コンバート失敗)

原因調査のため別の手頃なディレクトリをコンバートしたところうまくできました。(コンパート成功)

その後、メーリングリストに質問するにあたってパスやディレクトリを単純なものにした方が
良いかと考えて、失敗した方はpath1/dir1にリネーム、成功した比較対象の方はpath2/dir2に
リネームしてしまったのです。

そのためどちらの例もコンバート失敗するようになってしまいました。
(include の指定には最終的はパスだけでなく、変更前のパスも含める必要があることを
知らなかったためです)

{
> path2/dir2の方は改名前には履歴が含まれていました、 
提示のあった filemap2-1 の内容から、「script/os ⇒ path2/dir2」の 
改名が行われたであろうことは理解できるのですが、「path2/dir2の方は 
改名前には履歴が含まれていました」という表現が少々曖昧で、解釈に悩 
んでいます。 

ここで言う「改名」というのは、srcrepo における hg rename の話です 
よね? 
}

はい。そうです。

{
「履歴が含まれていました」というのは、srcrepo における履歴情報の有 
無の話ですか?それとも hg convert 結果の変換先リポジトリにおける履 
歴情報の有無の話ですか? 

また、前者であった場合の「path2/dir2 の履歴」とは「改名前の 
script/os の履歴」のことですか? 
}


はい。改名前のscript/os の履歴です。
path2/dir2の履歴には改名前のscript/os の履歴も含めて欲しかったのです。
(実際にはマップファイルに書かれてないからコンバート結果には含めないよということでした)
改名する前の状態でのコンバートテストでは、
コンバート結果の変換先リポジトリに履歴があったということです。
かなりわかりにくい説明ですいません。


変換先のリポジトリdir1, dir2は毎回消去して作りなおしていました。



{
> 改名によって履歴が失われているのかもしれません。 
ここで言う「履歴が失われている」は、どのような状況を想定されていま 
すか? 
}

ファイルは存在するのですが、hg log を実行すると履歴が1個か2個しか
表示されない状態です。

{
> ディレクトリ名の変更の一覧を表示する方法はありませんでしょうか? 

既に西原さんが返信されてますが、調査用途で使う場合は、改名実施リビ 
ジョンの情報も必要でしょうから、"{node|short}" あたりを追加した方 
が良いかも? 

  $ hg log --template "{file_copies % '{node|short} {source} => {name}\n'}" 

(テンプレートキーワード "file_copies" のヘルプは、ちょっと修正が 
必要だなぁ……) 
}
いつも参考にさせていただいてます。

文字列列挙型のキーワードに対応する、フォーマット文字列もヘルプで
表示されると助かるのですが、ヘルプにでるから必要そうなものを
個別に確認ということなのでしょうね。
(フォーマット文字列はヘルプにでない仕様なのでしょうが、
ヘルプに出てないキーワードもあるのでしょうか?)

Katsunori Fujiwara

unread,
Aug 11, 2015, 6:59:48 AM8/11/15
to mercurial-ja
藤原です。

2015年8月11日 17:21 ohira <shin....@gmail.com>:

> {
>> ディレクトリ名の変更の一覧を表示する方法はありませんでしょうか?
>
> 既に西原さんが返信されてますが、調査用途で使う場合は、改名実施リビ
> ジョンの情報も必要でしょうから、"{node|short}" あたりを追加した方
> が良いかも?
>
> $ hg log --template "{file_copies % '{node|short} {source} => {name}\n'}"
>
> (テンプレートキーワード "file_copies" のヘルプは、ちょっと修正が
> 必要だなぁ……)
> }
> いつも参考にさせていただいてます。
>
> 文字列列挙型のキーワードに対応する、フォーマット文字列もヘルプで
> 表示されると助かるのですが、ヘルプにでるから必要そうなものを
> 個別に確認ということなのでしょうね。
> (フォーマット文字列はヘルプにでない仕様なのでしょうが、
> ヘルプに出てないキーワードもあるのでしょうか?)

複数系な名前 (files とか tags) = list 系のテンプレートキーワード
の多くは、マッピング処理 (expr % "{template}" 形式) の際に、単数形
のキーワードを使うことで、列挙系の出力においても、自由に体裁を弄る
ことができます。

$ hg log -r "{files % '{rev}: {file}\n'}"

"{file_adds}" や "{file_dels}"、"{file_copies}" での要素参照の場合
は、単数形ではなく "{file}" を使う必要があるのは、ちょっとした罠な
のですが(笑)、"{file_adds}" に対する "{file_add}" 等は、スタイル定
義のために 1.x 版の頃から予約済みの名前なんですよねぇ……

http://d.hatena.ne.jp/flying-foozy/20121219/1355941578

で、この辺の要素参照の詳細は、そもそもヘルプ原文でも明示的に言及さ
れていないのですが、英語圏のユーザにとっては、語感とヘルプ中のサン
プルを見れば自明だからなのかなぁ?

- Format lists, e.g. files::

$ hg log -r 0 --template "files:\n{files % ' {file}\n'}"

また、"{file_copies}" での "{source}"/"{name}" 参照は、"{extras}"
での "{key}"/"{value}" と同じ位置付けですが、前者はこれまた原文で
の言及が無いです。

恐らくは、単純に「手が足りてない」and/or「気が周っていない」だけな
気がしますので、ボチボチ修正提案をしてみようと思います。

--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)
Reply all
Reply to author
Forward
0 new messages