740 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			740 lines
		
	
	
		
			23 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/bin/sh
 | |
| #
 | |
| # Copyright (c) 2012 Valentin Duperray, Lucien Kong, Franck Jonas,
 | |
| #		     Thomas Nguy, Khoi Nguyen
 | |
| #		     Grenoble INP Ensimag
 | |
| #
 | |
| 
 | |
| test_description='git status advice'
 | |
| 
 | |
| . ./test-lib.sh
 | |
| 
 | |
| . "$TEST_DIRECTORY"/lib-rebase.sh
 | |
| 
 | |
| set_fake_editor
 | |
| 
 | |
| test_expect_success 'prepare for conflicts' '
 | |
| 	git config --global advice.statusuoption false &&
 | |
| 	test_commit init main.txt init &&
 | |
| 	git branch conflicts &&
 | |
| 	test_commit on_master main.txt on_master &&
 | |
| 	git checkout conflicts &&
 | |
| 	test_commit on_conflicts main.txt on_conflicts
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status when conflicts unresolved' '
 | |
| 	test_must_fail git merge master &&
 | |
| 	cat >expected <<-\EOF &&
 | |
| 	# On branch conflicts
 | |
| 	# You have unmerged paths.
 | |
| 	#   (fix conflicts and run "git commit")
 | |
| 	#
 | |
| 	# Unmerged paths:
 | |
| 	#   (use "git add <file>..." to mark resolution)
 | |
| 	#
 | |
| 	#	both modified:      main.txt
 | |
| 	#
 | |
| 	no changes added to commit (use "git add" and/or "git commit -a")
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status when conflicts resolved before commit' '
 | |
| 	git reset --hard conflicts &&
 | |
| 	test_must_fail git merge master &&
 | |
| 	echo one >main.txt &&
 | |
| 	git add main.txt &&
 | |
| 	cat >expected <<-\EOF &&
 | |
| 	# On branch conflicts
 | |
| 	# All conflicts fixed but you are still merging.
 | |
| 	#   (use "git commit" to conclude merge)
 | |
| 	#
 | |
| 	# Changes to be committed:
 | |
| 	#
 | |
| 	#	modified:   main.txt
 | |
| 	#
 | |
| 	# Untracked files not listed (use -u option to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'prepare for rebase conflicts' '
 | |
| 	git reset --hard master &&
 | |
| 	git checkout -b rebase_conflicts &&
 | |
| 	test_commit one_rebase main.txt one &&
 | |
| 	test_commit two_rebase main.txt two &&
 | |
| 	test_commit three_rebase main.txt three
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status when rebase in progress before resolving conflicts' '
 | |
| 	test_when_finished "git rebase --abort" &&
 | |
| 	ONTO=$(git rev-parse --short HEAD^^) &&
 | |
| 	test_must_fail git rebase HEAD^ --onto HEAD^^ &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	# HEAD detached at $ONTO
 | |
| 	# You are currently rebasing branch '\''rebase_conflicts'\'' on '\''$ONTO'\''.
 | |
| 	#   (fix conflicts and then run "git rebase --continue")
 | |
| 	#   (use "git rebase --skip" to skip this patch)
 | |
| 	#   (use "git rebase --abort" to check out the original branch)
 | |
| 	#
 | |
| 	# Unmerged paths:
 | |
| 	#   (use "git reset HEAD <file>..." to unstage)
 | |
| 	#   (use "git add <file>..." to mark resolution)
 | |
| 	#
 | |
| 	#	both modified:      main.txt
 | |
| 	#
 | |
| 	no changes added to commit (use "git add" and/or "git commit -a")
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status when rebase in progress before rebase --continue' '
 | |
| 	git reset --hard rebase_conflicts &&
 | |
| 	test_when_finished "git rebase --abort" &&
 | |
| 	ONTO=$(git rev-parse --short HEAD^^) &&
 | |
| 	test_must_fail git rebase HEAD^ --onto HEAD^^ &&
 | |
| 	echo three >main.txt &&
 | |
| 	git add main.txt &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	# HEAD detached at $ONTO
 | |
| 	# You are currently rebasing branch '\''rebase_conflicts'\'' on '\''$ONTO'\''.
 | |
| 	#   (all conflicts fixed: run "git rebase --continue")
 | |
| 	#
 | |
| 	# Changes to be committed:
 | |
| 	#   (use "git reset HEAD <file>..." to unstage)
 | |
| 	#
 | |
| 	#	modified:   main.txt
 | |
| 	#
 | |
| 	# Untracked files not listed (use -u option to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'prepare for rebase_i_conflicts' '
 | |
| 	git reset --hard master &&
 | |
| 	git checkout -b rebase_i_conflicts &&
 | |
| 	test_commit one_unmerge main.txt one_unmerge &&
 | |
| 	git branch rebase_i_conflicts_second &&
 | |
| 	test_commit one_master main.txt one_master &&
 | |
| 	git checkout rebase_i_conflicts_second &&
 | |
| 	test_commit one_second main.txt one_second
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status during rebase -i when conflicts unresolved' '
 | |
| 	test_when_finished "git rebase --abort" &&
 | |
| 	ONTO=$(git rev-parse --short rebase_i_conflicts) &&
 | |
| 	test_must_fail git rebase -i rebase_i_conflicts &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	# HEAD detached at $ONTO
 | |
| 	# You are currently rebasing branch '\''rebase_i_conflicts_second'\'' on '\''$ONTO'\''.
 | |
| 	#   (fix conflicts and then run "git rebase --continue")
 | |
| 	#   (use "git rebase --skip" to skip this patch)
 | |
| 	#   (use "git rebase --abort" to check out the original branch)
 | |
| 	#
 | |
| 	# Unmerged paths:
 | |
| 	#   (use "git reset HEAD <file>..." to unstage)
 | |
| 	#   (use "git add <file>..." to mark resolution)
 | |
| 	#
 | |
| 	#	both modified:      main.txt
 | |
| 	#
 | |
| 	no changes added to commit (use "git add" and/or "git commit -a")
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status during rebase -i after resolving conflicts' '
 | |
| 	git reset --hard rebase_i_conflicts_second &&
 | |
| 	test_when_finished "git rebase --abort" &&
 | |
| 	ONTO=$(git rev-parse --short rebase_i_conflicts) &&
 | |
| 	test_must_fail git rebase -i rebase_i_conflicts &&
 | |
| 	git add main.txt &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	# HEAD detached at $ONTO
 | |
| 	# You are currently rebasing branch '\''rebase_i_conflicts_second'\'' on '\''$ONTO'\''.
 | |
| 	#   (all conflicts fixed: run "git rebase --continue")
 | |
| 	#
 | |
| 	# Changes to be committed:
 | |
| 	#   (use "git reset HEAD <file>..." to unstage)
 | |
| 	#
 | |
| 	#	modified:   main.txt
 | |
| 	#
 | |
| 	# Untracked files not listed (use -u option to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status when rebasing -i in edit mode' '
 | |
| 	git reset --hard master &&
 | |
| 	git checkout -b rebase_i_edit &&
 | |
| 	test_commit one_rebase_i main.txt one &&
 | |
| 	test_commit two_rebase_i main.txt two &&
 | |
| 	test_commit three_rebase_i main.txt three &&
 | |
| 	FAKE_LINES="1 edit 2" &&
 | |
| 	export FAKE_LINES &&
 | |
| 	test_when_finished "git rebase --abort" &&
 | |
| 	ONTO=$(git rev-parse --short HEAD~2) &&
 | |
| 	TGT=$(git rev-parse --short two_rebase_i) &&
 | |
| 	git rebase -i HEAD~2 &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	# HEAD detached from $TGT
 | |
| 	# You are currently editing a commit while rebasing branch '\''rebase_i_edit'\'' on '\''$ONTO'\''.
 | |
| 	#   (use "git commit --amend" to amend the current commit)
 | |
| 	#   (use "git rebase --continue" once you are satisfied with your changes)
 | |
| 	#
 | |
| 	nothing to commit (use -u to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status when splitting a commit' '
 | |
| 	git reset --hard master &&
 | |
| 	git checkout -b split_commit &&
 | |
| 	test_commit one_split main.txt one &&
 | |
| 	test_commit two_split main.txt two &&
 | |
| 	test_commit three_split main.txt three &&
 | |
| 	test_commit four_split main.txt four &&
 | |
| 	FAKE_LINES="1 edit 2 3" &&
 | |
| 	export FAKE_LINES &&
 | |
| 	test_when_finished "git rebase --abort" &&
 | |
| 	ONTO=$(git rev-parse --short HEAD~3) &&
 | |
| 	git rebase -i HEAD~3 &&
 | |
| 	git reset HEAD^ &&
 | |
| 	TGT=$(git rev-parse --short HEAD) &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	# HEAD detached at $TGT
 | |
| 	# You are currently splitting a commit while rebasing branch '\''split_commit'\'' on '\''$ONTO'\''.
 | |
| 	#   (Once your working directory is clean, run "git rebase --continue")
 | |
| 	#
 | |
| 	# Changes not staged for commit:
 | |
| 	#   (use "git add <file>..." to update what will be committed)
 | |
| 	#   (use "git checkout -- <file>..." to discard changes in working directory)
 | |
| 	#
 | |
| 	#	modified:   main.txt
 | |
| 	#
 | |
| 	no changes added to commit (use "git add" and/or "git commit -a")
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status after editing the last commit with --amend during a rebase -i' '
 | |
| 	git reset --hard master &&
 | |
| 	git checkout -b amend_last &&
 | |
| 	test_commit one_amend main.txt one &&
 | |
| 	test_commit two_amend main.txt two &&
 | |
| 	test_commit three_amend main.txt three &&
 | |
| 	test_commit four_amend main.txt four &&
 | |
| 	FAKE_LINES="1 2 edit 3" &&
 | |
| 	export FAKE_LINES &&
 | |
| 	test_when_finished "git rebase --abort" &&
 | |
| 	ONTO=$(git rev-parse --short HEAD~3) &&
 | |
| 	TGT=$(git rev-parse --short three_amend) &&
 | |
| 	git rebase -i HEAD~3 &&
 | |
| 	git commit --amend -m "foo" &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	# HEAD detached from $TGT
 | |
| 	# You are currently editing a commit while rebasing branch '\''amend_last'\'' on '\''$ONTO'\''.
 | |
| 	#   (use "git commit --amend" to amend the current commit)
 | |
| 	#   (use "git rebase --continue" once you are satisfied with your changes)
 | |
| 	#
 | |
| 	nothing to commit (use -u to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'prepare for several edits' '
 | |
| 	git reset --hard master &&
 | |
| 	git checkout -b several_edits &&
 | |
| 	test_commit one_edits main.txt one &&
 | |
| 	test_commit two_edits main.txt two &&
 | |
| 	test_commit three_edits main.txt three &&
 | |
| 	test_commit four_edits main.txt four
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status: (continue first edit) second edit' '
 | |
| 	FAKE_LINES="edit 1 edit 2 3" &&
 | |
| 	export FAKE_LINES &&
 | |
| 	test_when_finished "git rebase --abort" &&
 | |
| 	ONTO=$(git rev-parse --short HEAD~3) &&
 | |
| 	git rebase -i HEAD~3 &&
 | |
| 	git rebase --continue &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	# HEAD detached from $ONTO
 | |
| 	# You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
 | |
| 	#   (use "git commit --amend" to amend the current commit)
 | |
| 	#   (use "git rebase --continue" once you are satisfied with your changes)
 | |
| 	#
 | |
| 	nothing to commit (use -u to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status: (continue first edit) second edit and split' '
 | |
| 	git reset --hard several_edits &&
 | |
| 	FAKE_LINES="edit 1 edit 2 3" &&
 | |
| 	export FAKE_LINES &&
 | |
| 	test_when_finished "git rebase --abort" &&
 | |
| 	ONTO=$(git rev-parse --short HEAD~3) &&
 | |
| 	git rebase -i HEAD~3 &&
 | |
| 	git rebase --continue &&
 | |
| 	git reset HEAD^ &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	# HEAD detached from $ONTO
 | |
| 	# You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
 | |
| 	#   (Once your working directory is clean, run "git rebase --continue")
 | |
| 	#
 | |
| 	# Changes not staged for commit:
 | |
| 	#   (use "git add <file>..." to update what will be committed)
 | |
| 	#   (use "git checkout -- <file>..." to discard changes in working directory)
 | |
| 	#
 | |
| 	#	modified:   main.txt
 | |
| 	#
 | |
| 	no changes added to commit (use "git add" and/or "git commit -a")
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status: (continue first edit) second edit and amend' '
 | |
| 	git reset --hard several_edits &&
 | |
| 	FAKE_LINES="edit 1 edit 2 3" &&
 | |
| 	export FAKE_LINES &&
 | |
| 	test_when_finished "git rebase --abort" &&
 | |
| 	ONTO=$(git rev-parse --short HEAD~3) &&
 | |
| 	git rebase -i HEAD~3 &&
 | |
| 	git rebase --continue &&
 | |
| 	git commit --amend -m "foo" &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	# HEAD detached from $ONTO
 | |
| 	# You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
 | |
| 	#   (use "git commit --amend" to amend the current commit)
 | |
| 	#   (use "git rebase --continue" once you are satisfied with your changes)
 | |
| 	#
 | |
| 	nothing to commit (use -u to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status: (amend first edit) second edit' '
 | |
| 	git reset --hard several_edits &&
 | |
| 	FAKE_LINES="edit 1 edit 2 3" &&
 | |
| 	export FAKE_LINES &&
 | |
| 	test_when_finished "git rebase --abort" &&
 | |
| 	ONTO=$(git rev-parse --short HEAD~3) &&
 | |
| 	git rebase -i HEAD~3 &&
 | |
| 	git commit --amend -m "a" &&
 | |
| 	git rebase --continue &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	# HEAD detached from $ONTO
 | |
| 	# You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
 | |
| 	#   (use "git commit --amend" to amend the current commit)
 | |
| 	#   (use "git rebase --continue" once you are satisfied with your changes)
 | |
| 	#
 | |
| 	nothing to commit (use -u to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status: (amend first edit) second edit and split' '
 | |
| 	git reset --hard several_edits &&
 | |
| 	FAKE_LINES="edit 1 edit 2 3" &&
 | |
| 	export FAKE_LINES &&
 | |
| 	test_when_finished "git rebase --abort" &&
 | |
| 	ONTO=$(git rev-parse --short HEAD~3) &&
 | |
| 	git rebase -i HEAD~3 &&
 | |
| 	git commit --amend -m "b" &&
 | |
| 	git rebase --continue &&
 | |
| 	git reset HEAD^ &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	# HEAD detached from $ONTO
 | |
| 	# You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
 | |
| 	#   (Once your working directory is clean, run "git rebase --continue")
 | |
| 	#
 | |
| 	# Changes not staged for commit:
 | |
| 	#   (use "git add <file>..." to update what will be committed)
 | |
| 	#   (use "git checkout -- <file>..." to discard changes in working directory)
 | |
| 	#
 | |
| 	#	modified:   main.txt
 | |
| 	#
 | |
| 	no changes added to commit (use "git add" and/or "git commit -a")
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status: (amend first edit) second edit and amend' '
 | |
| 	git reset --hard several_edits &&
 | |
| 	FAKE_LINES="edit 1 edit 2 3" &&
 | |
| 	export FAKE_LINES &&
 | |
| 	test_when_finished "git rebase --abort" &&
 | |
| 	ONTO=$(git rev-parse --short HEAD~3) &&
 | |
| 	git rebase -i HEAD~3 &&
 | |
| 	git commit --amend -m "c" &&
 | |
| 	git rebase --continue &&
 | |
| 	git commit --amend -m "d" &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	# HEAD detached from $ONTO
 | |
| 	# You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
 | |
| 	#   (use "git commit --amend" to amend the current commit)
 | |
| 	#   (use "git rebase --continue" once you are satisfied with your changes)
 | |
| 	#
 | |
| 	nothing to commit (use -u to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status: (split first edit) second edit' '
 | |
| 	git reset --hard several_edits &&
 | |
| 	FAKE_LINES="edit 1 edit 2 3" &&
 | |
| 	export FAKE_LINES &&
 | |
| 	test_when_finished "git rebase --abort" &&
 | |
| 	ONTO=$(git rev-parse --short HEAD~3) &&
 | |
| 	git rebase -i HEAD~3 &&
 | |
| 	git reset HEAD^ &&
 | |
| 	git add main.txt &&
 | |
| 	git commit -m "e" &&
 | |
| 	git rebase --continue &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	# HEAD detached from $ONTO
 | |
| 	# You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
 | |
| 	#   (use "git commit --amend" to amend the current commit)
 | |
| 	#   (use "git rebase --continue" once you are satisfied with your changes)
 | |
| 	#
 | |
| 	nothing to commit (use -u to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status: (split first edit) second edit and split' '
 | |
| 	git reset --hard several_edits &&
 | |
| 	FAKE_LINES="edit 1 edit 2 3" &&
 | |
| 	export FAKE_LINES &&
 | |
| 	test_when_finished "git rebase --abort" &&
 | |
| 	ONTO=$(git rev-parse --short HEAD~3) &&
 | |
| 	git rebase -i HEAD~3 &&
 | |
| 	git reset HEAD^ &&
 | |
| 	git add main.txt &&
 | |
| 	git commit --amend -m "f" &&
 | |
| 	git rebase --continue &&
 | |
| 	git reset HEAD^ &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	# HEAD detached from $ONTO
 | |
| 	# You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
 | |
| 	#   (Once your working directory is clean, run "git rebase --continue")
 | |
| 	#
 | |
| 	# Changes not staged for commit:
 | |
| 	#   (use "git add <file>..." to update what will be committed)
 | |
| 	#   (use "git checkout -- <file>..." to discard changes in working directory)
 | |
| 	#
 | |
| 	#	modified:   main.txt
 | |
| 	#
 | |
| 	no changes added to commit (use "git add" and/or "git commit -a")
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status: (split first edit) second edit and amend' '
 | |
| 	git reset --hard several_edits &&
 | |
| 	FAKE_LINES="edit 1 edit 2 3" &&
 | |
| 	export FAKE_LINES &&
 | |
| 	test_when_finished "git rebase --abort" &&
 | |
| 	ONTO=$(git rev-parse --short HEAD~3) &&
 | |
| 	git rebase -i HEAD~3 &&
 | |
| 	git reset HEAD^ &&
 | |
| 	git add main.txt &&
 | |
| 	git commit --amend -m "g" &&
 | |
| 	git rebase --continue &&
 | |
| 	git commit --amend -m "h" &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	# HEAD detached from $ONTO
 | |
| 	# You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
 | |
| 	#   (use "git commit --amend" to amend the current commit)
 | |
| 	#   (use "git rebase --continue" once you are satisfied with your changes)
 | |
| 	#
 | |
| 	nothing to commit (use -u to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'prepare am_session' '
 | |
| 	git reset --hard master &&
 | |
| 	git checkout -b am_session &&
 | |
| 	test_commit one_am one.txt "one" &&
 | |
| 	test_commit two_am two.txt "two" &&
 | |
| 	test_commit three_am three.txt "three"
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status in an am session: file already exists' '
 | |
| 	git checkout -b am_already_exists &&
 | |
| 	test_when_finished "rm Maildir/* && git am --abort" &&
 | |
| 	git format-patch -1 -oMaildir &&
 | |
| 	test_must_fail git am Maildir/*.patch &&
 | |
| 	cat >expected <<-\EOF &&
 | |
| 	# On branch am_already_exists
 | |
| 	# You are in the middle of an am session.
 | |
| 	#   (fix conflicts and then run "git am --resolved")
 | |
| 	#   (use "git am --skip" to skip this patch)
 | |
| 	#   (use "git am --abort" to restore the original branch)
 | |
| 	#
 | |
| 	nothing to commit (use -u to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status in an am session: file does not exist' '
 | |
| 	git reset --hard am_session &&
 | |
| 	git checkout -b am_not_exists &&
 | |
| 	git rm three.txt &&
 | |
| 	git commit -m "delete three.txt" &&
 | |
| 	test_when_finished "rm Maildir/* && git am --abort" &&
 | |
| 	git format-patch -1 -oMaildir &&
 | |
| 	test_must_fail git am Maildir/*.patch &&
 | |
| 	cat >expected <<-\EOF &&
 | |
| 	# On branch am_not_exists
 | |
| 	# You are in the middle of an am session.
 | |
| 	#   (fix conflicts and then run "git am --resolved")
 | |
| 	#   (use "git am --skip" to skip this patch)
 | |
| 	#   (use "git am --abort" to restore the original branch)
 | |
| 	#
 | |
| 	nothing to commit (use -u to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status in an am session: empty patch' '
 | |
| 	git reset --hard am_session &&
 | |
| 	git checkout -b am_empty &&
 | |
| 	test_when_finished "rm Maildir/* && git am --abort" &&
 | |
| 	git format-patch -3 -oMaildir &&
 | |
| 	git rm one.txt two.txt three.txt &&
 | |
| 	git commit -m "delete all am_empty" &&
 | |
| 	echo error >Maildir/0002-two_am.patch &&
 | |
| 	test_must_fail git am Maildir/*.patch &&
 | |
| 	cat >expected <<-\EOF &&
 | |
| 	# On branch am_empty
 | |
| 	# You are in the middle of an am session.
 | |
| 	# The current patch is empty.
 | |
| 	#   (use "git am --skip" to skip this patch)
 | |
| 	#   (use "git am --abort" to restore the original branch)
 | |
| 	#
 | |
| 	nothing to commit (use -u to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status when bisecting' '
 | |
| 	git reset --hard master &&
 | |
| 	git checkout -b bisect &&
 | |
| 	test_commit one_bisect main.txt one &&
 | |
| 	test_commit two_bisect main.txt two &&
 | |
| 	test_commit three_bisect main.txt three &&
 | |
| 	test_when_finished "git bisect reset" &&
 | |
| 	git bisect start &&
 | |
| 	git bisect bad &&
 | |
| 	git bisect good one_bisect &&
 | |
| 	TGT=$(git rev-parse --short two_bisect) &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	# HEAD detached at $TGT
 | |
| 	# You are currently bisecting, started from branch '\''bisect'\''.
 | |
| 	#   (use "git bisect reset" to get back to the original branch)
 | |
| 	#
 | |
| 	nothing to commit (use -u to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status when rebase conflicts with statushints disabled' '
 | |
| 	git reset --hard master &&
 | |
| 	git checkout -b statushints_disabled &&
 | |
| 	test_when_finished "git config --local advice.statushints true" &&
 | |
| 	git config --local advice.statushints false &&
 | |
| 	test_commit one_statushints main.txt one &&
 | |
| 	test_commit two_statushints main.txt two &&
 | |
| 	test_commit three_statushints main.txt three &&
 | |
| 	test_when_finished "git rebase --abort" &&
 | |
| 	ONTO=$(git rev-parse --short HEAD^^) &&
 | |
| 	test_must_fail git rebase HEAD^ --onto HEAD^^ &&
 | |
| 	cat >expected <<-EOF &&
 | |
| 	# HEAD detached at $ONTO
 | |
| 	# You are currently rebasing branch '\''statushints_disabled'\'' on '\''$ONTO'\''.
 | |
| 	#
 | |
| 	# Unmerged paths:
 | |
| 	#	both modified:      main.txt
 | |
| 	#
 | |
| 	no changes added to commit
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'prepare for cherry-pick conflicts' '
 | |
| 	git reset --hard master &&
 | |
| 	git checkout -b cherry_branch &&
 | |
| 	test_commit one_cherry main.txt one &&
 | |
| 	test_commit two_cherries main.txt two &&
 | |
| 	git checkout -b cherry_branch_second &&
 | |
| 	test_commit second_cherry main.txt second &&
 | |
| 	git checkout cherry_branch &&
 | |
| 	test_commit three_cherries main.txt three
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status when cherry-picking before resolving conflicts' '
 | |
| 	test_when_finished "git cherry-pick --abort" &&
 | |
| 	test_must_fail git cherry-pick cherry_branch_second &&
 | |
| 	cat >expected <<-\EOF &&
 | |
| 	# On branch cherry_branch
 | |
| 	# You are currently cherry-picking.
 | |
| 	#   (fix conflicts and run "git commit")
 | |
| 	#
 | |
| 	# Unmerged paths:
 | |
| 	#   (use "git add <file>..." to mark resolution)
 | |
| 	#
 | |
| 	#	both modified:      main.txt
 | |
| 	#
 | |
| 	no changes added to commit (use "git add" and/or "git commit -a")
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| 
 | |
| test_expect_success 'status when cherry-picking after resolving conflicts' '
 | |
| 	git reset --hard cherry_branch &&
 | |
| 	test_when_finished "git cherry-pick --abort" &&
 | |
| 	test_must_fail git cherry-pick cherry_branch_second &&
 | |
| 	echo end >main.txt &&
 | |
| 	git add main.txt &&
 | |
| 	cat >expected <<-\EOF &&
 | |
| 	# On branch cherry_branch
 | |
| 	# You are currently cherry-picking.
 | |
| 	#   (all conflicts fixed: run "git commit")
 | |
| 	#
 | |
| 	# Changes to be committed:
 | |
| 	#
 | |
| 	#	modified:   main.txt
 | |
| 	#
 | |
| 	# Untracked files not listed (use -u option to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| test_expect_success 'status showing detached from a tag' '
 | |
| 	test_commit atag tagging &&
 | |
| 	git checkout atag &&
 | |
| 	cat >expected <<-\EOF
 | |
| 	# HEAD detached at atag
 | |
| 	nothing to commit (use -u to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| test_expect_success 'status while reverting commit (conflicts)' '
 | |
| 	git checkout master &&
 | |
| 	echo before >to-revert.txt &&
 | |
| 	test_commit before to-revert.txt &&
 | |
| 	echo old >to-revert.txt &&
 | |
| 	test_commit old to-revert.txt &&
 | |
| 	echo new >to-revert.txt &&
 | |
| 	test_commit new to-revert.txt &&
 | |
| 	TO_REVERT=$(git rev-parse --short HEAD^) &&
 | |
| 	test_must_fail git revert $TO_REVERT &&
 | |
| 	cat >expected <<-EOF
 | |
| 	# On branch master
 | |
| 	# You are currently reverting commit $TO_REVERT.
 | |
| 	#   (fix conflicts and run "git revert --continue")
 | |
| 	#   (use "git revert --abort" to cancel the revert operation)
 | |
| 	#
 | |
| 	# Unmerged paths:
 | |
| 	#   (use "git reset HEAD <file>..." to unstage)
 | |
| 	#   (use "git add <file>..." to mark resolution)
 | |
| 	#
 | |
| 	#	both modified:      to-revert.txt
 | |
| 	#
 | |
| 	no changes added to commit (use "git add" and/or "git commit -a")
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| test_expect_success 'status while reverting commit (conflicts resolved)' '
 | |
| 	echo reverted >to-revert.txt &&
 | |
| 	git add to-revert.txt &&
 | |
| 	cat >expected <<-EOF
 | |
| 	# On branch master
 | |
| 	# You are currently reverting commit $TO_REVERT.
 | |
| 	#   (all conflicts fixed: run "git revert --continue")
 | |
| 	#   (use "git revert --abort" to cancel the revert operation)
 | |
| 	#
 | |
| 	# Changes to be committed:
 | |
| 	#   (use "git reset HEAD <file>..." to unstage)
 | |
| 	#
 | |
| 	#	modified:   to-revert.txt
 | |
| 	#
 | |
| 	# Untracked files not listed (use -u option to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| test_expect_success 'status after reverting commit' '
 | |
| 	git revert --continue &&
 | |
| 	cat >expected <<-\EOF
 | |
| 	# On branch master
 | |
| 	nothing to commit (use -u to show untracked files)
 | |
| 	EOF
 | |
| 	git status --untracked-files=no >actual &&
 | |
| 	test_i18ncmp expected actual
 | |
| '
 | |
| 
 | |
| test_done
 |