[PATCH] Check case-folding clashes during addremove

Andrei Vermel andrei.vermel at gmail.com
Mon Apr 16 04:26:35 CDT 2007


>> After a bit of thinking, it seems to me that dirstate.update is not
>> a good place to call the check function, due to the fact that it gets 
>> called
>> with only a single file.
>
> We really want to do these checks only when a file is added (by hg add,
> addremove, copy, move or somebody using python directly).
> dirstate.update feels like the right place for this...
>
> But we could change the callers to call dirstate.update with all the
> files available.  Doing this for localrepo.add shouldn't be hard; for
> copies/moves we'd probably need a new method in localrepo.
Yes, this makes sense.

> Allowing this would open an interesting way for the user to shoot his
> foot by doing
>
> hg mv aaa AAA
> hg commit -m 'case clash' AAA
It's probably worth explicitely requiring that rename pairs get committed
together. I don't think anyone may really want it differently.

>> @@ -268,9 +282,11 @@ class dirstate(object):
>>         if state == "a":
>>             self.initdirs()
>>             self.checkinterfering(files)
>> +            self.check_add_case_clashes(files)
>>         for f in files:
>>             if state == "r":
>>                 self.map[f] = ('r', 0, 0, 0)
>> +                self.add_foldmap(f)
>>                 self.updatedirs(f, -1)
>
> add_foldmap or del_foldmap?
Well spotted. Should be none actually, as f is in the map already, it just 
gets
marked for removal. It is deleted later.

The other comments also seem valid. Thanks for your feedback.

Andrei 



More information about the Mercurial-devel mailing list