Re: [mercurial-ja:1808] [thg] 何も変更していないのにコミットしていない変更があると言われることがある

124 views
Skip to first unread message
Message has been deleted

Katsunori FUJIWARA

unread,
Jun 29, 2017, 6:42:17 AM6/29/17
to mercurial-ja
藤原です。

2017年6月28日 15:20 ohira <shin....@gmail.com>:

> いつもお世話になっております。
> おおひらです。
>
> TortoiseHg バージョン 4.2.1 を使っていて、
> 何も変更していないのにコミットしていない変更があると言われることがあります。
>
> そのようなメッセージが表示されたときに
> hg stat を実行したところ、何故か変更されたファイル名が表示されました。
> hg diff で差分を表示しようとしたところ差分無し、、、
> 再度 hg stat を行ったところ、今度は変更されたファイルの情報は消えていました。

TortoiseHg で、オーバーレイアイコンによる変更監視を有効にしている
場合は、つい先日対処した以下の障害と同じ要因で、上記のような現象が
発生する可能性があります。

https://bz.mercurial-scm.org/show_bug.cgi?id=5584

(1) 変更監視処理が、作業領域状態管理ファイル (.hg/dirstate) を読み込む

(2) 変更監視処理が、作業領域の状態確認を開始
※ メモリ上にはこの時点のファイル状態が記録

(3) ユーザ契機の操作で、作業領域の状態が変更
(例: add, remove, commit, update etc....)
(3-1) 作業領域のロックを獲得
(3-2) 処理を実施
(3-3) 作業領域のロックを解放

(4) 変更監視処理が、作業領域の状態確認を終了

(5) 変更監視処理が、作業領域のロックを獲得

この処理が (3) と重なる場合は、以下の処理は省略 (= 障害は
発生しない)

(6) 変更監視処理が、確認済みの状態情報を書き出し

ここでの書き出しは、(2) ~ (5) での状態を反映しているので、
(3) の時点の状態が上書きされてしまう可能性がある

- add したファイル ⇒ unknown
- remove/forget したファイル ⇒ missing/clean
- commit/update -C 済みのファイル ⇒ modified

この障害は既に修正済みですが、残念ながら修正が適用されるのは 8 月
初旬の 4.3 版からとなります。

それまでは、オーバーレイアイコンによる変更監視を無効にするのがよろ
しいかと。


> 2017/06/28 10:49 <DIR> .
> 2017/06/28 10:49 <DIR> ..
> 2017/06/28 12:36 <DIR> sps_20
> 2017/06/28 10:48 <DIR> sps_20_static
> 2017/06/28 10:35 <DIR> sps_25
> 2017/06/28 11:06 <DIR> sps_25_static
> 0 個のファイル 0 バイト
> 6 個のディレクトリ 24,402,841,600 バイトの空き領域
>
> C:\Users\ohira\repos\trunk>cd sps_25_static
>
> C:\Users\ohira\repos\trunk\sps_25_static>hg stat
> M setup\blog\theme\simple\14\sitemap.html
>
>
> C:\Users\ohira\repos\trunk\sps_25_static>
> C:\Users\ohira\repos\trunk\sps_25_static>
> C:\Users\ohira\repos\trunk\sps_25_static>
> C:\Users\ohira\repos\trunk\sps_25_static>hg diff
>
>
> C:\Users\ohira\repos\trunk\sps_25_static>hg stat
>
>
> C:\Users\ohira\repos\trunk\sps_25_static>
>
>
>
> --
> 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 にアクセスしてください。



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

ohira

unread,
Jul 3, 2017, 2:27:56 AM7/3/17
to mercurial-ja
おおひらです。

回答ありがとうございます。

経緯:
hg flow での定型的な作業をスクリプトで実行しているだけで変更していないのに
コミットしていない変更があるというメッセージが表示されることがありました。
また、このような現象はwindowsのTortoiseHgでは発生しますが、unixで動作している
hg flowでは発生したことがありません。
再現しようとしても再現できないのですが、hg cloneした直後にhg updateしただけでも
発生することがあるので、操作ミスやスクリプトのミスではなくてTortoiseHgの障害なのかと考えていました。

対策:
ご指摘いただいたように
TortoiseHgをインストールするとオーバーレイアイコンによる変更監視が有効になっていましたので、無効にいたしました。
4.3を待つことにします。

気になった点として、このような状態が一時的な状態で自然に復旧したりするものなのでしょうか?
> (3) の時点の状態が上書きされてしまう可能性がある
>
>       - add したファイル ⇒ unknown
>       - remove/forget したファイル ⇒ missing/clean
>       - commit/update -C 済みのファイル ⇒ modified

今回は、現象が発生した状態でhg コマンドで状況を確認してみたら
初めは変更されたファイルが存在したのに、ほんの僅かな時間で
無くなってしまっていました。


2017年6月29日木曜日 19時42分17秒 UTC+9 FUJIWARA Katsunori:

Katsunori FUJIWARA

unread,
Jul 5, 2017, 12:57:55 AM7/5/17
to mercurial-ja
藤原です。

2017年7月3日 15:27 ohira <shin....@gmail.com>:
> おおひらです。
>
> 回答ありがとうございます。
>
> 経緯:

> hg flow での定型的な作業をスクリプトで実行しているだけで変更して
> いないのにコミットしていない変更があるというメッセージが表示され
> ることがありました。また、このような現象はwindowsのTortoiseHgで
> は発生しますが、unixで動作しているhg flowでは発生したことがあり
> ません。
> 再現しようとしても再現できないのですが、hg cloneした直後にhg
> updateしただけでも発生することがあるので、操作ミスやスクリプトの
> ミスではなくてTortoiseHgの障害なのかと考えていました。
>
> 対策:

> ご指摘いただいたようにTortoiseHgをインストールするとオーバーレイ
> アイコンによる変更監視が有効になっていましたので、無効にいたしま
> した。
> 4.3を待つことにします。

一点補足を。

今回のような状態になった場合、.hg/dirstate に古い状態の親リビジョ
ン情報が書き込まれている可能性があるので、念のため "hg summary" 等
で親リビジョンも確認してみてください。

想定外の親リビジョンの場合は、"hg debugrebuilddirstate" 等で状態を
再構築する必要があります。

https://www.mercurial-scm.org/wiki/JapaneseRepositoryCorruption#Dirstate_.2BMG54NGQN-

> 気になった点として、このような状態が一時的な状態で自然に復旧した
> りするものなのでしょうか?
>
>> (3) の時点の状態が上書きされてしまう可能性がある
>>
>> - add したファイル ⇒ unknown
>> - remove/forget したファイル ⇒ missing/clean
>> - commit/update -C 済みのファイル ⇒ modified
>
> 今回は、現象が発生した状態でhg コマンドで状況を確認してみたら
> 初めは変更されたファイルが存在したのに、ほんの僅かな時間で
> 無くなってしまっていました。

済みません。「変更あり」メッセージの後に、明示的に "hg status" を
実行している点を見落としてました…… orz

明示的な "hg status" で「変更あり」だった上で、再度の "hg status"
が「変更なし」だとすると、想定されているファイルとストレージ上のも
のとの間で、サイズか内容の違いが検出されたケースということになりま
す。

仮にオーバーレイアイコンによる変更監視が有効だったとしても、添付実
行例のような要領で実施された "hg status" 間では、親リビジョンが変
更され得ないので、ファイルの想定サイズ/内容も一定な筈です。

そうすると、最初の "hg status" 時に、何らかの理由によりストレージ
上のファイルのサイズ/内容が想定と異なっていた、というところでしょ
うかねぇ。

可能性としては、アンチウィルスソフトが割り込んで、想定外の内容を返
した、とか?
Reply all
Reply to author
Forward
Message has been deleted
Message has been deleted
0 new messages