unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Dmitry Gutov <dgutov@yandex.ru>
To: Eli Zaretskii <eliz@gnu.org>
Cc: larsi@gnus.org, juri@jurta.org, emacs-devel@gnu.org
Subject: Re: master 4803fba487 1/2: 'C-x v v' on a diff buffer commits it as a patch (bug#52349)
Date: Tue, 30 Aug 2022 15:35:31 +0300	[thread overview]
Message-ID: <a0f543a2-d6fc-aa42-72c6-c5ec3fd8802a@yandex.ru> (raw)
In-Reply-To: <83tu5uug68.fsf@gnu.org>

On 30.08.2022 14:25, Eli Zaretskii wrote:
>> Date: Mon, 29 Aug 2022 23:36:32 +0300
>> Cc: larsi@gnus.org, juri@jurta.org, emacs-devel@gnu.org
>> From: Dmitry Gutov <dgutov@yandex.ru>
>>
>>> The implementation in vc-git.el does this, AFAICT:
>>>
>>>     . creates a temporary file
>>>     . inserts the patch into the temporary file
>>
>> Note that "the patch" will usually be a subset of the current 'git diff'
>> output. But not always (the patch can be additionally modified by hand).
> 
> I understand.  But how is this significant?  Doesn't "git apply"
> require a valid patch as well?

It's significant in that the starting conditions is that the files are 
already modified compared to the repository head, and the end goal is to 
be able to pick only some of those changes for commit. To partition a 
complex change into several commits, usually. Or to simply keep 
unfinished changes separate without resorting to 'git stash'. (**)

>>>     . calls "git apply --cached" on the patch in the temporary file
>>>     . deletes the temporary file
>>>
>>> This doesn't seem to be very different from invoking Patch on the
>>> diffs.  (And using shell-command-on-region avoids the need to
>>> explicitly create a temporary file.)
>>
>> 'patch < file' edits the working directory. 'git apply --cached' edits
>> the index, keeping the files themselves unchanged.
> 
> I'm not sure why is this significant.  Doesn't committing the patch
> from the index eventually update the files on disk as well?

Nope.

> And if
> not, how is this feature useful? you get a repository where the
> contents of the .git/ directory doesn't match the worktree, right?
> When is this needed or useful?

See above. The two sentences near near the (**) sign.

You can also commit a patch with changes that aren't present in the 
files and then 'vc-revert' in them. But doing that kind of thing wasn't 
particularly difficult even before this feature landed IMHO.

>>>> Personally I hope we discover some popular extension to Mercurial which
>>>> we'll be able to use in the same way as we do Git's index area here. And
>>>> then say job well done and keep the less-popular and outdated backends
>>>> unsupported.
>>>
>>> The index thing being the problem because Git needs to have the
>>> changes in the index before you can commit?  Or is there any other
>>> reason?
>>
>> Index is a solution, not the problem. The problem is other changes being
>> present on disk.
> 
> For other changes present on disk, we cam:
> 
>    . use the equivalent of the "stash" command, where the VCS supports it
>    . otherwise, commit specific files by name, where the VCS supports that
>    . otherwise signal an error, asking the user to clean up the tree

Like I said, I'm worried about the resulting differences in behavior. 
That will make it much harder for us to document the new feature 
properly, and the users who work with different backends from time to 
time are likely to stumble over those differences.

So far using /tmp and copying seems like a better approach.

>> I suppose we could implement a scaled-down version of this feature as a
>> fallback (the one that ensures that there are no existing changes in
>> affected files), but I fear the difference between the backends would
>> trip up the users.
> 
> AFAICT, Mercurial, Bazaar, RCS, CVS, and SVN all support committing an
> explicit list of files, so dirty working tree shouldn't be a problem
> for them.  The first two also have a "stash"-like functionality.

Not dirty working tree. "Dirty" specific files which we want to commit 
certain changes in.

> But even if we initially only support this in otherwise clean trees,
> it will be a huge advantage vs the current situation, where this
> feature is simply not available.

Will the advantage be significant? I really have to ask, because IME 
applying an external patch and them committing the files as a whole 
never felt particularly painful before (aside from resolving any 
conflicts or corrupted whitespace, which the new feature doesn't help 
with). And 'diff-mode' has had the 'diff-apply-hunk' command for ages -- 
I use it often.

OTOH, the lack of support for workflow corresponding to 'git add -p' has 
been complained about frequently, it's one of the reasons people use 
Magit, and I felt it as well many times.

To improve your workflow, though, might it help to add a new command 
'diff-apply-buffer'?



  reply	other threads:[~2022-08-30 12:35 UTC|newest]

Thread overview: 95+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <166171593185.16640.41619657947456727@vcs2.savannah.gnu.org>
     [not found] ` <20220828194533.23A6BC00889@vcs2.savannah.gnu.org>
2022-08-28 21:18   ` master 4803fba487 1/2: 'C-x v v' on a diff buffer commits it as a patch (bug#52349) Sean Whitton
2022-08-29  4:50     ` Manuel Uberti
2022-08-29 16:40     ` Daniel Martín
2022-08-29 14:48   ` Lars Ingebrigtsen
2022-08-29 16:46     ` Eli Zaretskii
2022-08-29 17:05       ` Dmitry Gutov
2022-08-29 17:41         ` Eli Zaretskii
2022-08-29 19:03           ` Tassilo Horn
2022-08-29 19:31             ` Eli Zaretskii
2022-08-29 20:36           ` Dmitry Gutov
2022-08-30 11:25             ` Eli Zaretskii
2022-08-30 12:35               ` Dmitry Gutov [this message]
2022-08-30 13:01                 ` Eli Zaretskii
2022-08-30 13:52                   ` Dmitry Gutov
2022-08-30 16:20                     ` Eli Zaretskii
2022-08-30 17:33                       ` Dmitry Gutov
2022-08-30 16:47                 ` Juri Linkov
2022-08-30 17:05                   ` Eli Zaretskii
2022-08-30 17:11                     ` Dmitry Gutov
2022-08-30 17:37                       ` Eli Zaretskii
2022-08-30 17:39                         ` Dmitry Gutov
2022-08-30 17:18                     ` Juri Linkov
2022-08-30  7:20         ` Juri Linkov
2022-08-30 11:54           ` Eli Zaretskii
2022-08-30 14:49             ` Sean Whitton
2022-08-30 16:39               ` Juri Linkov
2022-08-30 16:45               ` Eli Zaretskii
2022-08-31  2:38                 ` Richard Stallman
2022-08-31 15:48                 ` Jonas Bernoulli
2022-08-31  2:38               ` Richard Stallman
2022-09-01  0:32                 ` Sean Whitton
2022-09-01  0:33                   ` Sean Whitton
2022-08-30 11:56           ` Eli Zaretskii
2022-08-30 12:03           ` Dmitry Gutov
2022-09-01 20:13             ` Dmitry Gutov
2022-08-30 13:25       ` Alfred M. Szmidt
2022-08-30 13:42         ` Po Lu
2022-08-30 14:02           ` Alfred M. Szmidt
2022-10-25 19:22           ` Dmitry Gutov
2022-08-30 14:08         ` Dmitry Gutov
2022-08-30 14:20           ` Alfred M. Szmidt
2022-08-30 14:38             ` Dmitry Gutov
2022-08-30 15:16               ` Stefan Monnier
2022-08-30 15:26                 ` Dmitry Gutov
2022-08-30 15:33                   ` Lars Ingebrigtsen
2022-08-30 15:45                     ` Dmitry Gutov
2022-08-30 15:53                       ` Lars Ingebrigtsen
2022-08-30 18:36                   ` Stefan Monnier
2022-08-30 20:59                     ` Dmitry Gutov
2022-08-30 16:50                 ` Eli Zaretskii
2022-08-31  6:51                   ` Alfred M. Szmidt
2022-08-30 16:37               ` Eli Zaretskii
2022-08-30 16:45                 ` Lars Ingebrigtsen
2022-08-30 17:02                   ` Eli Zaretskii
2022-08-30 17:11                     ` Lars Ingebrigtsen
2022-08-30 17:34                       ` Eli Zaretskii
2022-08-30 17:38                         ` Lars Ingebrigtsen
2022-08-30 19:23                       ` Sean Whitton
2022-08-30 17:10                 ` Dmitry Gutov
2022-08-31  1:28               ` Po Lu
2022-08-31  2:32                 ` Dmitry Gutov
2022-08-31  6:53                   ` Juri Linkov
2022-08-31  9:55                     ` Lars Ingebrigtsen
2022-08-31 10:35                       ` Dmitry Gutov
2022-08-31 10:37                         ` Lars Ingebrigtsen
2022-08-31 11:09                           ` Dmitry Gutov
2022-08-31 15:42                             ` Lars Ingebrigtsen
2022-08-31 16:24                               ` Dmitry Gutov
2022-08-31 16:39                                 ` Lars Ingebrigtsen
2022-08-31 18:02                                   ` Dmitry Gutov
2022-09-01 10:16                                     ` Lars Ingebrigtsen
2022-09-01 11:31                                       ` Dmitry Gutov
2022-09-01 11:45                                         ` Lars Ingebrigtsen
2022-09-01 11:48                                           ` Dmitry Gutov
2022-09-01 11:57                                             ` Eli Zaretskii
2022-10-17  0:11                                             ` Dmitry Gutov
2022-10-17 19:17                                               ` Juri Linkov
2022-09-01 13:26                                           ` Robert Pluim
2022-09-01 13:28                                             ` Dmitry Gutov
2022-09-01 13:32                                               ` Robert Pluim
2022-09-03  2:51                                             ` Richard Stallman
2022-09-04 12:27                                               ` Alfred M. Szmidt
2022-08-31 11:11                     ` Dmitry Gutov
2022-08-31 16:06                       ` Juri Linkov
2022-08-31 16:21                         ` Dmitry Gutov
2022-08-31 16:36                           ` Eli Zaretskii
2022-10-16 23:53                             ` Dmitry Gutov
2022-10-16 23:54                               ` Dmitry Gutov
2022-08-31 16:41                           ` Dmitry Gutov
2022-08-31 11:23                   ` Eli Zaretskii
2022-08-31 11:57                     ` Dmitry Gutov
2022-08-31 12:36                       ` Eli Zaretskii
2022-09-04  7:26         ` Philip Kaludercic
2022-09-04 12:27           ` Alfred M. Szmidt
2022-09-04 17:07             ` Philip Kaludercic

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a0f543a2-d6fc-aa42-72c6-c5ec3fd8802a@yandex.ru \
    --to=dgutov@yandex.ru \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=juri@jurta.org \
    --cc=larsi@gnus.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).