I've filed this as issue 612 in the Mercurial bug tracker.

Stephen Lau wrote:
> Stephen Lau wrote:
>> Richard Lowe wrote:
>>> Richard Lowe wrote:
>>>> Stephen Lau wrote:
>>>>> Richard Lowe wrote:
>>>>>> Can someone else build a pre-winchester onnv, then bringover the 
>>>>>> Winchester putback and see if they see similar?  This is with the 
>>>>>> current SUNWmercurial Danek put up, not 0.9.3, or 0.9.4 (I'm 
>>>>>> working on updating our stuff for 0.9.4, and getting 0.9.4 
>>>>>> packaged for us, and into sfwnv (probably) now...).
>>>>>
>>>>> Ka-boom.  I was able to reproduce part of this (list of files 
>>>>> below). Though unlike Rich, I didn't have any changes to commit.  
>>>>> Attempting a 'hg commit' just shows "(nothing changed)", and 'hg 
>>>>> st' doesn't show any changes.
>>>>>
>>>>
>>>> Yeah, everyone can do that bit.  Now, why do I see them in the 
>>>> dirstate, and why can I commit that junk?  'hg st -mard' doesn't 
>>>> show you !'d files from the source part?
>>>
>>> Ok, what state does it think files that were previously not 
>>> controlled are in?
>>>
>>> hg st <one of the libsqlite objects>
>>> hg debugstate | grep '/libsqlite/'
>>>
>>> Do you see them in the dirstate in either case?  I do, and a rebuild 
>>> of libsqlite will show the make.state as modified (and it will commit 
>>> it, if I commit...)
>>>
>>> -- Rich
>>
>> Yup, I was able to reproduce this fully now.  Here's what I did:
>> hg clone -r 4519 ssh://anon at hg.opensolaris.org/hg/onnv/onnv-gate
>> ran a full build (probably unnecessary - it might be sufficient to 
>> just build usr/src/cmd/svc/configd/sqlite).
>> hg pull -u -r 4520
>> bldenv -d developer.sh
>> cd usr/src/lib/libsqlite
>> dmake all
>> hg status -mard
>>
>> so hg status now shows:
>> [stevel at zday:libsqlite] 502$ hg st -mard
>> M usr/src/lib/libsqlite/.make.state
>>
>> So it thinks .make.state is tracked when it shouldn't be.
>>
>> This should probably be marked as a stopper - committing things which 
>> shouldn't be under revision control is bad.
>>
>> cheers,
>> steve
>>
> 
> Here's an even simpler test case to reproduce that doesn't involve 
> onnv-gate (so should be easier for mpm to debug):
> 
> $ hg init hg-parent
> $ cd hg-parent
> $ mkdir dir
> $ cd dir
> $ cat <<EOF >a.c
>  > #include <stdio.h>
>  > int main() {printf("hello world");}
>  > EOF
> $ hg add a.c
> $ hg commit -m "Added a.c"
> $ cd ../..
> $ hg clone hg-parent hg-child
> 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> $ cd hg-child/dir
> $ cc a.c
> $ cd ../../hg-parent
> $ hg rename dir newdir
> copying dir/a.c to newdir/a.c
> removing dir/a.c
> $ hg commit -m "Renamed dir->newdir"
> $ cd ../hg-child
> $ hg pull -u
> pulling from /home/stevel/hg-parent
> searching for changes
> adding changesets
> adding manifests
> adding file changes
> added 1 changesets with 1 changes to 1 files
> not in dirstate: dir/a.out!
> 2 files updated, 0 files merged, 1 files removed, 0 files unresolved
> $ cd newdir
> $ cc a.c
> $ hg st
> M newdir/a.out
> 
> 
> So it now thinks a.out is under SCM control when it shouldn't be.
> 
> cheers,
> steve


-- 
stephen lau // stevel at sun.com | 650.786.0845 | http://whacked.net
opensolaris // solaris kernel development

Reply via email to