git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [StGit PATCH] Check for local changes with "goto"

From
CMCatalin Marinas <catalin.marinas@gmail.com>
Date
Feb 6, 2009, 18:39 UTC
Message-ID
<b0943d9e0902061039g37eb521fl26d60d33c45a206@mail.gmail.com>
In-Reply-To
<20090206153106.GA28897@diana.vm.bytemark.co.uk>
2009/2/6 Karl Hasselström <kha@treskal.com>:
Show 14 quoted lines
> On 2009-02-06 14:46:19 +0000, Catalin Marinas wrote:
>
>> 2009/1/30 Catalin Marinas <catalin.marinas@gmail.com>:
>>
>> > Now, should we add the check_clean argument to
>> > Transaction.__init__() rather than run() as we do for the
>> > allow_bad_head case?
>>
>> It looks like this may be a better option.
>
> Sorry for taking so long to respond, but ... I strongly advise against
> using default_iw in transaction.py. It's library code, and it should
> take stuff like index and worktree as input parameters from layers
> that are higher up in the abstraction stack.
OK, no problem with that.
Show 12 quoted lines
>> The previous patch fails if "goto" pushes a patch with standard
>> git-apply followed by another patch with a three-way merge. When
>> Transaction.run() is called, even if the patch pushing succeeded,
>> the function complains about local changes because of the
>> "iw.index.is_clean(self.stack.head)" check.
>
> Hmm, so that would have to be worked around somehow ... I guess doing
> the check in __init__() might make sense after all, since that's
> before we start changing things. How about adding a
> check_clean_relative_to paramter to __init__() that's not a boolean,
> but an iw to check against? It would default to None, meaning no
> check.
OK, that's better.
Show 11 quoted lines
>> It is also a bit weird to push/pop patches and only complain at the
>> end of local changes.
>
> You mean the behavior the new infrastructure currently gives you? It's
> actually convenient in a number of cases. Assume for example that you
> have patch A that changes file foo, patch B that changes file bar, and
> then local changes to file bar. At this point you can pop A without
> problem, even though a middle stage is to pop and push B which touches
> the same file as your local changes -- the existing checks will only
> compare the diff between the original and final tree with your local
> changes, and that diff doesn't contain bar.

Yes, I agree that's a nice feature and it would still be available with the --keep option (I wrote in the past why I wouldn't leave the current behaviour to be the default).

Above I was referring to the new behaviour which checks for local changes by default (--keep not passed). If we do the test in run() you may push or pop patches and only fail at the end when actually the operation shouldn't have started. I plan to add the auto interactive merging to the new infrastructure (by invoking mergetool if IndexAndWorktree.merge() fails, based on the stgit.autoimerge option) and pushing may become a more complex operation if enabled.

I'll repost the patch. Thanks.
-- 
Catalin
Previous: Karl Hasselström
Message 8 of 8 in “Check for local changes with "goto"”
  1. Check for local changes with "goto"Catalin Marinas, Jan 28, 2009
  2. Karl HasselströmJan 29, 2009
  3. Catalin MarinasJan 30, 2009
  4. Karl HasselströmJan 30, 2009
  5. Catalin MarinasJan 30, 2009
  6. Catalin MarinasFeb 6, 2009
  7. Karl HasselströmFeb 6, 2009
  8. Catalin MarinasFeb 6, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.