Stefan Sperling wrote on Wed, Sep 15, 2010 at 20:42:55 +0200:
> On Wed, Sep 15, 2010 at 04:51:15PM +0200, Daniel Shahaf wrote:
> > s...@apache.org wrote on Wed, Sep 15, 2010 at 10:05:15 -0000:
> > > Author: stsp
> > > Date: Wed Sep 15 10:05:14 2010
> > > New Revision: 997249
> > > 
> > > URL: http://svn.apache.org/viewvc?rev=997249&view=rev
> > > Log:
> > > Add an --old-patch-target-names option to svn patch.
> > > This option is useful in two cases:
> > > 
> > >  1) A patch contains names like
> > >     --- foo.c
> > >     +++ foo.c.new
> > >     and should be applied to foo.c.
> > > 
> > >  2) A patch contains names like
> > >     --- foo.c.orig
> > >     +++ foo.c
> > >     and should be applied in reverse to foo.c, e.g. to undo prior 
> > > application
> > >     of the patch.
> > 
> > What happens if a user forgets to supply the new option?  (Does svn
> > complain that 'foo.c.new is nonexistent/unversioned'?)
> 
> $ svn patch test.diff
> Skipped missing target: 'foo.new'
> Summary of conflicts:
>   Skipped paths: 1

Okay.  So it always uses the /^+++/ path.  Pro: simple and predictable,
con: sometimes it's possible to guess the correct path via other means
(the Index: line, or extension stripping, etc; see the other thread).

> 
> > For case (2): suppose I have such a patch (was emailed to me).  I
> > applied it using 'svn patch $patchfile'.  Now I want to unapply it; so
> > so I use 'svn patch --rd $patchfile' or 'svn patch --rd --optn $patchfile'? 
> >  
> > AIUI, currently only the latter will work?
> 
> Which one works depends on the way path names appear in the patch.
> 
> Say you have a diff produced with svn diff.
> That will work with either combination of options.
> 
> $ svn diff
> Index: alpha
> ===================================================================
> --- alpha       (revision 2)
> +++ alpha       (working copy)
> @@ -1 +1,2 @@
>  alpha
> +aaa
> 
> You need the new option only to handle cases where people used e.g. the
> UNIX diff tool to create a patch using left/right names they made up
> while producing the diff.
> 
> > Is the UI "'svn patch' always uses the filename in the /^+++/ line"?
> 
> Yes. By default, that's the name that is used.
> 
> If you reverse the diff, the filenames get swapped as well.
> So if you use the --optn option, the filenames get swapped again, or not at
> all, depending which way you look at it :)
> 

My point was that I think --rd shouldn't swap the filenames.

> This UI may not be ideal, and I'm open for suggestions on how we could
> improve it. Maybe there's a way to handle this without user interaction,
> or a better name for the new option?
> 
> The UNIX patch tool prompts for a filename when it cannot find a target.
> We could do the same, defining yet another prompt callback type.
> 
> But I don't like the fact that UNIX patch does not do tab-completion in its
> prompt. I think the lack of tab-completion really affects usability.
> So if svn had a prompt for this, I'd like it to support tab-completion.
> 

Tab completion?  Can we do that using APR or similar?

> So the new --optn option is an easier way to implement this.
> Maybe it's sufficient? Note that having the option around doesn't hurt
> even if we decide to implement prompting later.

Devil's advocate: It's a very narrow-scoped option, and might become
obsolete if we extend this part of the code a bit.

> 
> Stefan

Reply via email to