 d04520e344
			
		
	
	d04520e344
	
	
	
		
			
			The reset command creates its reflog entry from argv.
However, it does so after having run parse_options, which
means the only thing left in argv is any non-option
arguments. Thus you would end up with confusing reflog
entries like:
  $ git reset --hard HEAD^
  $ git reset --soft HEAD@{1}
  $ git log -2 -g --oneline
  8e46cad HEAD@{0}: HEAD@{1}: updating HEAD
  1eb9486 HEAD@{1}: HEAD^: updating HEAD
However, we must also consider that some scripts may set
GIT_REFLOG_ACTION before calling reset, and we need to show
their reflog action (with our text appended). For example:
  rebase -i (squash): updating HEAD
On top of that, we also set the ORIG_HEAD reflog action
(even though it doesn't generally exist). In that case, the
reset argument is somewhat meaningless, as it has nothing to
do with what's in ORIG_HEAD.
This patch changes the reset reflog code to show:
  $GIT_REFLOG_ACTION: updating {HEAD,ORIG_HEAD}
as before, but only if GIT_REFLOG_ACTION is set. Otherwise,
show:
   reset: moving to $rev
for HEAD, and:
   reset: updating ORIG_HEAD
for ORIG_HEAD (this is still somewhat superfluous, since we
are in the ORIG_HEAD reflog, obviously, but at least we now
mention which command was used to update it).
While we're at it, we can clean up the code a bit:
 - Use strbufs to make the message.
 - Use the "rev" parameter instead of showing all options.
   This makes more sense, since it is the only thing
   impacting the writing of the ref.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
	
		
			
				
	
	
		
			35 lines
		
	
	
		
			783 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			783 B
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| test_description='reflog walk shows repeated commits again'
 | |
| . ./test-lib.sh
 | |
| 
 | |
| test_expect_success 'setup commits' '
 | |
| 	test_tick &&
 | |
| 	echo content >file && git add file && git commit -m one &&
 | |
| 	git tag one &&
 | |
| 	echo content >>file && git add file && git commit -m two &&
 | |
| 	git tag two
 | |
| '
 | |
| 
 | |
| test_expect_success 'setup reflog with alternating commits' '
 | |
| 	git checkout -b topic &&
 | |
| 	git reset one &&
 | |
| 	git reset two &&
 | |
| 	git reset one &&
 | |
| 	git reset two
 | |
| '
 | |
| 
 | |
| test_expect_success 'reflog shows all entries' '
 | |
| 	cat >expect <<-\EOF
 | |
| 		topic@{0} reset: moving to two
 | |
| 		topic@{1} reset: moving to one
 | |
| 		topic@{2} reset: moving to two
 | |
| 		topic@{3} reset: moving to one
 | |
| 		topic@{4} branch: Created from HEAD
 | |
| 	EOF
 | |
| 	git log -g --format="%gd %gs" topic >actual &&
 | |
| 	test_cmp expect actual
 | |
| '
 | |
| 
 | |
| test_done
 |