threads / discuss / 19817

A question about using 'add -p' to split the patch

Subject: A question about using 'add -p' to split the patch

## tl;dr

5 messages between Jun 15, 2009 and Jun 15, 2009.

replies: 4people: 2as markdown or json

Ping Yin· Jun 15, 2009, 03:08 UTC · lore
file bt.php in the HEAD:
function bt_add($path) {
 return;
}
file bt.php in the working directory:
function bt_move($path, $pos) {
  return;
}
function bt_add($path, $pos) {
  bt_move($path, $pos)
  return;
}

Now i want to split the change into two parts: First introduce bt_move Then add a param pos to bt_add and call bt_move

With the 'e' action of 'add -p', i got
-function bt_add($path) {
+function bt_move($path, $pos) {
+  return;
+}
+function bt_add($path, $pos) {
+  bt_move($path, $pos)
   return;
 }
Then, i want to edit the patch to get
function bt_move($path, $pos) {
  return;
}
function bt_add($path) {
  return;
}
However, whatever i do, the patch fails to apply. Any suggestion?
-
Ping Yin
David Aguilar· Jun 15, 2009, 06:12 UTC · re: Ping Yin · lore

Re: A question about using 'add -p' to split the patch

On Mon, Jun 15, 2009 at 11:08:51AM +0800, Ping Yin wrote:
Show 42 quoted lines
> file bt.php in the HEAD:
> 
> function bt_add($path) {
>  return;
> }
> 
> file bt.php in the working directory:
> 
> function bt_move($path, $pos) {
>   return;
> }
> function bt_add($path, $pos) {
>   bt_move($path, $pos)
>   return;
> }
> 
> Now i want to split the change into two parts:
> First introduce bt_move
> Then add a param pos to bt_add and call bt_move
> 
> With the 'e' action of 'add -p', i got
> 
> -function bt_add($path) {
> +function bt_move($path, $pos) {
> +  return;
> +}
> +function bt_add($path, $pos) {
> +  bt_move($path, $pos)
>    return;
>  }
> 
> Then, i want to edit the patch to get
> 
> 
> function bt_move($path, $pos) {
>   return;
> }
> function bt_add($path) {
>   return;
> }
> 
> However, whatever i do, the patch fails to apply. Any suggestion?

Use git-gui or git-cola to select just bt_move() for addition. You can stage specific lines.

After doing that it's often a good idea to git stash --keep-index so you can test it before committing.

enjoy,
-- 
		David
Ping Yin· Jun 15, 2009, 06:24 UTC · re: David Aguilar · lore

Re: A question about using 'add -p' to split the patch

On Mon, Jun 15, 2009 at 2:12 PM, David Aguilar<davvid@gmail.com> wrote:
Show 46 quoted lines
> On Mon, Jun 15, 2009 at 11:08:51AM +0800, Ping Yin wrote:
>> file bt.php in the HEAD:
>>
>> function bt_add($path) {
>>  return;
>> }
>>
>> file bt.php in the working directory:
>>
>> function bt_move($path, $pos) {
>>   return;
>> }
>> function bt_add($path, $pos) {
>>   bt_move($path, $pos)
>>   return;
>> }
>>
>> Now i want to split the change into two parts:
>> First introduce bt_move
>> Then add a param pos to bt_add and call bt_move
>>
>> With the 'e' action of 'add -p', i got
>>
>> -function bt_add($path) {
>> +function bt_move($path, $pos) {
>> +  return;
>> +}
>> +function bt_add($path, $pos) {
>> +  bt_move($path, $pos)
>>    return;
>>  }
>>
>> Then, i want to edit the patch to get
>>
>>
>> function bt_move($path, $pos) {
>>   return;
>> }
>> function bt_add($path) {
>>   return;
>> }
>>
>> However, whatever i do, the patch fails to apply. Any suggestion?
>
> Use git-gui or git-cola to select just bt_move() for addition.
> You can stage specific lines.
Doesn't the 'e' action of 'add -p' do the same job with git-gui?
David Aguilar· Jun 15, 2009, 07:36 UTC · re: Ping Yin · lore

Re: A question about using 'add -p' to split the patch

On Mon, Jun 15, 2009 at 02:24:39PM +0800, Ping Yin wrote:
Show 49 quoted lines
> On Mon, Jun 15, 2009 at 2:12 PM, David Aguilar<davvid@gmail.com> wrote:
> > On Mon, Jun 15, 2009 at 11:08:51AM +0800, Ping Yin wrote:
> >> file bt.php in the HEAD:
> >>
> >> function bt_add($path) {
> >>  return;
> >> }
> >>
> >> file bt.php in the working directory:
> >>
> >> function bt_move($path, $pos) {
> >>   return;
> >> }
> >> function bt_add($path, $pos) {
> >>   bt_move($path, $pos)
> >>   return;
> >> }
> >>
> >> Now i want to split the change into two parts:
> >> First introduce bt_move
> >> Then add a param pos to bt_add and call bt_move
> >>
> >> With the 'e' action of 'add -p', i got
> >>
> >> -function bt_add($path) {
> >> +function bt_move($path, $pos) {
> >> +  return;
> >> +}
> >> +function bt_add($path, $pos) {
> >> +  bt_move($path, $pos)
> >>    return;
> >>  }
> >>
> >> Then, i want to edit the patch to get
> >>
> >>
> >> function bt_move($path, $pos) {
> >>   return;
> >> }
> >> function bt_add($path) {
> >>   return;
> >> }
> >>
> >> However, whatever i do, the patch fails to apply. Any suggestion?
> >
> > Use git-gui or git-cola to select just bt_move() for addition.
> > You can stage specific lines.
> 
> Doesn't the 'e' action of 'add -p' do the same job with git-gui?
It should.

I tried it in git-{cola,gui} and I was able to do it by first staging the +bt_add(a,b) line, and then staging only the -bt_add(a) line.

For add -e I got it to work by editing the patch to;
+function bt_move($path, $pos) {
+  return;
+}
 function bt_add($path) {
   return;
 }

The reason it's hard to get right is that you have to reconstruct the context of the original content for the adds/removes and remember to add the space before the reconstructed bt_add($path).

Those kinda details are usually easier for software to get right ;-)

-- 
		David
Ping Yin· Jun 15, 2009, 08:56 UTC · re: David Aguilar · lore

Re: A question about using 'add -p' to split the patch

Show 15 quoted lines
>
> For add -e I got it to work by editing the patch to;
>
> +function bt_move($path, $pos) {
> +  return;
> +}
>  function bt_add($path) {
>    return;
>  }
>
> The reason it's hard to get right is that you have to
> reconstruct the context of the original content for the
> adds/removes and remember to add the space before the
> reconstructed bt_add($path).
>
Thanks very much, i forgot the space before the reconstructed bt_add($path) :-)

← back to recent threads