[PATCH] histedit: add support for exec/x command to histedit (issue4036)

Piotr Listkiewicz piotr.listkiewicz at gmail.com
Sat Oct 24 16:13:23 UTC 2015


>
> 1) Check how the re-entrace is handled
>
> 2) Unlock the right amount of time
> 3) relock that amount of time
> We probably want a context manager to handle that at the lock level.
> Feel free to ask for more details if you need more guidance.
> I really need guidance in this regard, i will be helpful for any
> information about it,
> because i even don't know how can i find case like this in source code.
>
>
Ok, reentrance is done in version V2

My point here is that if some command changed stuff (new commit, bookmark
> location etc), some of it might not be detected by the current process that
> already parsed them from disk and naively assume they did not changed since
> it hold the lock.
> I would like to see some investigation to know if we need to do something
> special (or if it is already handled, for example by the lock). to make
> sure we are safe here.


We should talk about this, i still have no idea how can i check this or
what to do with it

2015-09-29 19:40 GMT+01:00 Pierre-Yves David <pierre-yves.david at ens-lyon.org
>:

>
>
> On 09/29/2015 11:36 AM, Piotr Listkiewicz wrote:
>
>> I am still interested in doing this task, please reply or let me know if
>> you need more time
>>
>
> Thanks for pinging me. I'll trying to get to it soonâ„¢, ping me again if I
> fails to do so :-/
>
>
>> 2015-09-22 11:42 GMT+02:00 Piotr Listkiewicz
>> <piotr.listkiewicz at gmail.com <mailto:piotr.listkiewicz at gmail.com>>:
>>
>>
>>         1) Check how the re-entrace is handled
>>         2) Unlock the right amount of time
>>         3) relock that amount of time
>>         We probably want a context manager to handle that at the lock
>> level.
>>         Feel free to ask for more details if you need more guidance.
>>
>>
>>     I really need guidance in this regard, i will be helpful for any
>>     information about it,
>>     because i even don't know how can i find case like this in source
>> code.
>>
>>         My point here is that if some command changed stuff (new commit,
>>         bookmark location etc), some of it might not be detected by the
>>         current process that already parsed them from disk and naively
>>         assume they did not changed since it hold the lock.
>>         I would like to see some investigation to know if we need to do
>>         something special (or if it is already handled, for example by
>>         the lock). to make sure we are safe here.
>>
>>
>>     I need help with this too, my current knowledge of code base is too
>>     little to even know how can i investigate it. I can add additional
>>     test cases which works, but this will not assure that it wouldn't
>>     crash on some specific others.
>>
>>         I'm not familliar with this unknown file issue, do we something
>>         to fix there? Is there a bug tracking/explaining it?
>>
>>     I didn't find any bug related to it so i have no idea if this is a
>>     bug or a feature. It can be tracked like this:
>>
>>     $ hg init edit_bug
>>     $ cd edit_bug
>>     $ touch a
>>     $ hg add a
>>     $ hg commit -m "a"
>>     $ touch b
>>     $ hg add b
>>     $ hg commit -m "b"
>>     $ touch c
>>     $ hg add c
>>     $ hg commit -m "c"
>>     $ hg histedit 1 --command - 2>&1 << EOF
>>      > edit 1
>>      > pick 2
>>      > EOF
>>     // after command it stopps at commit 1(commit "b")
>>     $ touch d
>>     $ hg histedit --continue
>>     // shows editor to change commit message, just write it to preserve
>> old
>>     // histedit commands ends here because we picked commit 2
>>     $ hg status
>>     ? d
>>
>>     Histedit continued with untracked file d doesn't throwing any
>>     exception, doesnt telling user about it. This behaviour is all about
>>     how histedit.bootstrapcontinue works, in this patch i extracted
>>     current way of checking if current working context is clean in
>>     _isdirtywc method. This method to check this invokes repo.status()
>>     which by default doesn't check untracked files. Changing invocation
>>     to repo.status(unknown=True) should fix this behaviour, but i have
>>     no idea if this behaviour is bug.
>>
>>
>>         edit was initially intended to just edit the changeset and
>>         possibly split it in multiple parts. It has known issue with
>>         anything else. CF:http://bz.selenic.com/show_bug.cgi?id=4800
>>         As exec will likely be heavily used for history edition we will
>>         hit this issues. not to talk about people dropping to a shell
>>         using exec
>>         Moreover edit have special logic looking for replacement on
>>         --continue that track replacement. I do not see such logic in
>>         the exec code.
>>
>>
>>
>>     My intention to prevent this described Durham Goode:
>>
>>         Regarding your initial points 1 and 2, he addresses this in the
>>         run() function by recreating the commit before running the shell
>>         command.  So the hash will always be different (though I think
>>         the _commit function may need to put some extra data in the
>>         extras field to ensure that the hash changes).
>>
>>
>>
>>
>>     2015-09-16 7:27 GMT+02:00 Durham Goode <durham at fb.com
>>     <mailto:durham at fb.com>>:
>>
>>
>>
>>
>>         On 9/15/15 1:54 PM, Pierre-Yves David wrote:
>>
>>
>>
>>             On 09/14/2015 01:04 PM, Piotr Listkiewicz wrote:
>>
>>                      This seems to be a resend, we usually add V2 (then
>>                 V3, etc) to the
>>                      subject (using --flag V2 in patchbomb).
>>
>>
>>                 My fault, Im new here and i probably omitted this
>>                 information in
>>                 contribution wiki
>>
>>
>>             Not a big deal, but please do for the next ones, it's a bit
>>             confusing on the reviewer end otherwise.
>>
>>                      Once we ensure we really release the lock (even
>>                 when nested) we'll
>>                      have to ensure that we reacquires them with the
>>                 same level of nesting.
>>                      (we probably want a context manager for this
>>                 unlocking business)
>>
>>
>>                 Honestly i don't know how can i release it properly and
>>                 how to ensure
>>                 that it reacquires them with the same level of nesting.
>>                 I would be
>>                 greateful for instruction/more information about it.
>>
>>
>>             1) Check how the re-entrace is handled
>>             2) Unlock the right amount of time
>>             3) relock that amount of time
>>
>>             We probably want a context manager to handle that at the
>>             lock level.
>>
>>             Feel free to ask for more details if you need more guidance.
>>
>>                      Also, if the commands changed the repository, do we
>>                 need to forcibly
>>                      invalidate some cache to ensure a consistent view
>>                 of the repository?
>>                      Or is this already taken care of by something else.
>>
>>                   From tests it seems like it properly detects changes
>>                 in repository
>>                 other than unknown files.
>>
>>
>>             My point here is that if some command changed stuff (new
>>             commit, bookmark location etc), some of it might not be
>>             detected by the current process that already parsed them
>>             from disk and naively assume they did not changed since it
>>             hold the lock.
>>
>>             I would like to see some investigation to know if we need to
>>             do something special (or if it is already handled, for
>>             example by the lock). to make sure we are safe here.
>>
>>
>>                 But this behaviour is consistent with edit
>>                 commands which doesn't detect unknown files also.
>>
>>
>>             The edit command terminates the current process and starts a
>>             new one, so it is far more safe in this regards.
>>
>>                 In my view if we agree
>>                 that unknown files should be detected by the exec
>>                 command we should
>>                 detect it in edit command as well.
>>
>>
>>             I'm not familliar with this unknown file issue, do we
>>             something to fix there? Is there a bug tracking/explaining it?
>>
>>                      This is going to break/misbehaver in in multiple
>> cases.
>>                      1) if nothing changed, you code claim that
>>                 changeset X replace
>>                      changesets X. If the current code does not explode
>>                 with this yet,
>>                      this will probably bite use in the future
>>                      2) if anything else but an amend happened (fold,
>>                 splitting, adding
>>                      more changesets) this is going to report wrong
>>                 result and lead to
>>                      crash when moving bookmarks or creating
>>                 obsolescence markers.
>>
>>
>>                 It is most likely that i don't get it, but i have no
>>                 idea why this would
>>                 lead to such behaviour more than edit command. Edit
>>                 command behaves same
>>                 way if user amend to given commit, replacing it with new
>>                 ammend version.
>>
>>
>>             edit was initially intended to just edit the changeset and
>>             possibly split it in multiple parts. It has known issue with
>>             anything else. CF: http://bz.selenic.com/show_bug.cgi?id=4800
>>
>>             As exec will likely be heavily used for history edition we
>>             will hit this issues. not to talk about people dropping to a
>>             shell using exec
>>
>>             Moreover edit have special logic looking for replacement on
>>             --continue that track replacement. I do not see such logic
>>             in the exec code.
>>
>>
>>             To conclude, thanks again for trackling this exec commands,
>>             I'm trying to point out at the know trap early on, because
>>             the topic is quite complex.
>>
>>         Regarding your initial points 1 and 2, he addresses this in the
>>         run() function by recreating the commit before running the shell
>>         command.  So the hash will always be different (though I think
>>         the _commit function may need to put some extra data in the
>>         extras field to ensure that the hash changes).
>>
>>
>>
>>
> --
> Pierre-Yves David
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20151024/b9ab879e/attachment.html>


More information about the Mercurial-devel mailing list