def __assert_checkout_not_head(self, *fps): root = self.repo.root for fp in fps: utils_lib.write_file(fp, contents='contents') self.curr_b.checkout_file( os.path.relpath(fp, root), self.repo.revparse_single('HEAD^')) self.assertEqual(TRACKED_FP_CONTENTS_1, utils_lib.read_file(fp))
def test_diff_non_ascii(self): if sys.platform == 'win32': # Skip this test on Windows until we fix Unicode support return fp = 'new' new_fp_contents = '’◕‿◕’©Ä☺’ಠ_ಠ’\n' utils_lib.write_file(fp, contents=new_fp_contents) self.curr_b.track_file(fp) patch = self.curr_b.diff_file(fp) self.assertEqual(1, patch.line_stats[1]) self.assertEqual(0, patch.line_stats[2]) self.assertEqual(1, len(patch.hunks)) hunk = list(patch.hunks)[0] self.assertEqual(1, len(hunk.lines)) self.assertEqual('+', hunk.lines[0].origin) self.assertEqual(new_fp_contents, hunk.lines[0].content) utils_lib.append_to_file(fp, contents='new line') patch = self.curr_b.diff_file(fp) self.assertEqual(2, patch.line_stats[1]) self.assertEqual(0, patch.line_stats[2]) self.assertEqual(1, len(patch.hunks)) hunk = list(patch.hunks)[0] self.assertEqual(3, len(hunk.lines)) self.assertEqual('+', hunk.lines[0].origin) self.assertEqual(new_fp_contents, hunk.lines[0].content) self.assertEqual('+', hunk.lines[1].origin) self.assertEqual('new line', hunk.lines[1].content)
def test_status_modify(self): utils_lib.write_file(TRACKED_FP, contents='contents') st = self.curr_b.status_file(TRACKED_FP) self.assertTrue(st.modified) utils_lib.write_file(TRACKED_FP, contents=TRACKED_FP_CONTENTS_2) st = self.curr_b.status_file(TRACKED_FP) self.assertFalse(st.modified)
def test_diff_non_ascii(self): fp = 'new' new_fp_contents = '’◕‿◕’©Ä☺’ಠ_ಠ’\n' utils_lib.write_file(fp, contents=new_fp_contents) self.curr_b.track_file(fp) patch = self.curr_b.diff_file(fp) self.assertEqual(1, patch.line_stats[1]) self.assertEqual(0, patch.line_stats[2]) self.assertEqual(1, len(patch.hunks)) hunk = list(patch.hunks)[0] self.assertEqual(1, len(hunk.lines)) self.assertEqual('+', hunk.lines[0].origin) self.assertEqual(new_fp_contents, hunk.lines[0].content) utils_lib.append_to_file(fp, contents='new line') patch = self.curr_b.diff_file(fp) self.assertEqual(2, patch.line_stats[1]) self.assertEqual(0, patch.line_stats[2]) self.assertEqual(1, len(patch.hunks)) hunk = list(patch.hunks)[0] self.assertEqual(3, len(hunk.lines)) self.assertEqual('+', hunk.lines[0].origin) self.assertEqual(new_fp_contents, hunk.lines[0].content) self.assertEqual('+', hunk.lines[1].origin) self.assertEqual('new line', hunk.lines[1].content)
def test_conflicts_switch(self): gl.switch('other') utils.write_file(self.OTHER_FILE, contents='uncommitted') gl.switch('master') try: gl.fuse(self.OTHER, e=self.commits[self.OTHER][0]) self.fail() except ErrorReturnCode: pass # Switch gl.switch('other') self.__assert_history(self.__build('other')) st_out = utils.stdout(gl.status()) self.assertTrue('fuse' not in st_out) self.assertTrue('conflict' not in st_out) gl.switch('master') st_out = utils.stdout(gl.status()) self.assertTrue('fuse' in st_out) self.assertTrue('conflict' in st_out) # Check that we are able to complete the fuse after switch gl.resolve(self.OTHER_FILE) gl.commit(m='ci 1 in other') self.__assert_history( self.__build(self.OTHER, range(1, self.COMMITS_NUMBER)) + self.__build('master')) gl.switch('other') self.assertEqual('uncommitted', utils.read_file(self.OTHER_FILE))
def test_switch_contents_still_there_untracked(self): self.repo.switch_current_branch(self.repo.lookup_branch(BRANCH)) utils_lib.write_file(UNTRACKED_FP, contents='contents') self.repo.switch_current_branch(self.repo.lookup_branch('master')) self.assertEqual(UNTRACKED_FP_CONTENTS, utils_lib.read_file(UNTRACKED_FP)) self.repo.switch_current_branch(self.repo.lookup_branch(BRANCH)) self.assertEqual('contents', utils_lib.read_file(UNTRACKED_FP))
def __assert_checkout_not_head(self, *fps): root = self.repo.root for fp in fps: utils_lib.write_file(fp, contents='contents') self.curr_b.checkout_file(os.path.relpath(fp, root), self.repo.revparse_single('HEAD^')) self.assertEqual(TRACKED_FP_CONTENTS_1, utils_lib.read_file(fp))
def test_diff_new_fp(self): fp = 'new' new_fp_contents = 'new fp contents\n' utils_lib.write_file(fp, contents=new_fp_contents) self.curr_b.track_file(fp) patch = self.curr_b.diff_file(fp) self.assertEqual(1, patch.line_stats[1]) self.assertEqual(0, patch.line_stats[2]) self.assertEqual(1, len(patch.hunks)) hunk = list(patch.hunks)[0] self.assertEqual(1, len(hunk.lines)) self.assertEqual('+', hunk.lines[0].origin) self.assertEqual(new_fp_contents, hunk.lines[0].content) # Now let's add some change to the file and check that diff notices it utils_lib.append_to_file(fp, contents='new line') patch = self.curr_b.diff_file(fp) self.assertEqual(2, patch.line_stats[1]) self.assertEqual(0, patch.line_stats[2]) self.assertEqual(1, len(patch.hunks)) hunk = list(patch.hunks)[0] self.assertEqual(3, len(hunk.lines)) self.assertEqual('+', hunk.lines[0].origin) self.assertEqual(new_fp_contents, hunk.lines[0].content) self.assertEqual('+', hunk.lines[1].origin) self.assertEqual('new line', hunk.lines[1].content)
def test_conflicts_multiple_uncommitted_changes(self): gl.branch(c='tmp', divergent_point='HEAD~2') gl.switch('tmp') utils.append_to_file(self.MASTER_FILE, contents='conflict') gl.commit(m='will conflict 0') utils.append_to_file(self.MASTER_FILE, contents='conflict') gl.commit(m='will conflict 1') utils.write_file(self.MASTER_FILE, contents='uncommitted') self.assertRaisesRegexp(ErrorReturnCode, 'conflicts', gl.fuse, 'master') gl.resolve(self.MASTER_FILE) self.assertRaisesRegexp(ErrorReturnCode, 'conflicts', gl.commit, m='ci 0 in tmp') gl.resolve(self.MASTER_FILE) self.assertRaisesRegexp(ErrorReturnCode, 'failed to apply', gl.commit, m='ci 1 in tmp') self.__assert_history( self.__build('master') + self.__build('tmp', range(2))) self.assertTrue('Stashed' in utils.read_file(self.MASTER_FILE))
def test_switch_contents_still_there_ignored(self): self.repo.switch_current_branch(self.repo.lookup_branch(BRANCH)) utils_lib.write_file(IGNORED_FP, contents='contents') self.repo.switch_current_branch(self.repo.lookup_branch('master')) self.assertEqual(IGNORED_FP, utils_lib.read_file(IGNORED_FP)) self.repo.switch_current_branch(self.repo.lookup_branch(BRANCH)) self.assertEqual('contents', utils_lib.read_file(IGNORED_FP))
def test_switch_contents_still_there_tracked_commit(self): utils_lib.write_file(TRACKED_FP, contents='commit') git.commit(TRACKED_FP, m='comment') self.repo.switch_current_branch(self.repo.lookup_branch(BRANCH)) self.assertEqual(TRACKED_FP_CONTENTS_2, utils_lib.read_file(TRACKED_FP)) self.repo.switch_current_branch(self.repo.lookup_branch('master')) self.assertEqual('commit', utils_lib.read_file(TRACKED_FP))
def test_status_unignore(self): utils_lib.write_file('.gitignore', contents='') st = self.curr_b.status_file(IGNORED_FP) self.assertEqual(core.GL_STATUS_UNTRACKED, st.type) st = self.curr_b.status_file(IGNORED_FP_WITH_SPACE) self.assertEqual(core.GL_STATUS_UNTRACKED, st.type)
def setUp(self): super(TestRemoteSync, self).setUp() utils_lib.write_file('foo', contents='foo') git.add('foo') git.commit('foo', m='msg') self.repo.remotes.create('remote', self.remote_path) self.remote = self.repo.remotes['remote']
def test_basic_diff(self): utils.write_file(self.TRACKED_FP, contents='contents') out1 = utils.stdout(gl.diff(_tty_out=False)) if '+contents' not in out1: self.fail() out2 = utils.stdout(gl.diff(o=self.TRACKED_FP, _tty_out=False)) if '+contents' not in out2: self.fail() self.assertEqual(out1, out2)
def test_switch_with_hidden_files(self): hf = '.file' utils_lib.write_file(hf) self.repo.switch_current_branch(self.repo.lookup_branch(BRANCH)) utils_lib.write_file(hf, contents='contents') self.repo.switch_current_branch(self.repo.lookup_branch('master')) self.assertEqual(hf, utils_lib.read_file(hf)) self.repo.switch_current_branch(self.repo.lookup_branch(BRANCH)) self.assertEqual('contents', utils_lib.read_file(hf))
def test_uncommitted_tracked_changes_that_conflict(self): gl.branch(c='tmp', divergent_point='HEAD~1') gl.switch('tmp') utils.write_file(self.MASTER_FILE, contents='uncommitted') self.assertRaisesRegexp( ErrorReturnCode, 'failed to apply', gl.merge, 'master') contents = utils.read_file(self.MASTER_FILE) self.assertTrue('uncommitted' in contents) self.assertTrue('contents 2' in contents)
def test_basic_diff(self): utils.write_file(self.TRACKED_FP, contents='contents') out1 = utils.stdout(gl.diff()) if '+contents' not in out1: self.fail() out2 = utils.stdout(gl.diff(self.TRACKED_FP)) if '+contents' not in out2: self.fail() self.assertEqual(out1, out2)
def test_uncommitted_tracked_changes_that_conflict(self): gl.branch(c='tmp', divergent_point='HEAD~1') gl.switch('tmp') utils.write_file(self.MASTER_FILE, contents='uncommitted') self.assertRaisesRegexp(ErrorReturnCode, 'failed to apply', gl.merge, 'master') contents = utils.read_file(self.MASTER_FILE) self.assertTrue('uncommitted' in contents) self.assertTrue('contents 2' in contents)
def test_status_untrack_tracked_modify(self): self.curr_b.untrack_file(TRACKED_FP) st = self.curr_b.status_file(TRACKED_FP) self.assertEqual(core.GL_STATUS_UNTRACKED, st.type) # self.assertFalse(st.modified) utils_lib.write_file(TRACKED_FP, contents='contents') st = self.curr_b.status_file(TRACKED_FP) self.assertEqual(core.GL_STATUS_UNTRACKED, st.type) self.assertTrue(st.modified)
def test_diff_non_ascii(self): contents = '’◕‿◕’©Ä☺’ಠ_ಠ’' utils.write_file(self.TRACKED_FP, contents=contents) out1 = utils.stdout(gl.diff(_tty_out=False)) if '+' + contents not in out1: self.fail('out is ' + out1) out2 = utils.stdout(gl.diff(o=self.TRACKED_FP, _tty_out=False)) if '+' + contents not in out2: self.fail('out is ' + out2) self.assertEqual(out1, out2)
def test_basic_diff_relative(self): utils.write_file(self.TRACKED_FP, contents='contents_tracked') utils.write_file(self.DIR_TRACKED_FP, contents='contents_dir_tracked') os.chdir(self.DIR) out1 = utils.stdout(gl.diff()) if '+contents_tracked' not in out1: self.fail() if '+contents_dir_tracked' not in out1: self.fail() rel_dir_tracked_fp = os.path.relpath(self.DIR_TRACKED_FP, self.DIR) out2 = utils.stdout(gl.diff(rel_dir_tracked_fp)) if '+contents_dir_tracked' not in out2: self.fail()
def test_diff_non_ascii(self): if sys.platform == 'win32': # Skip this test on Windows until we fix Unicode support return contents = '’◕‿◕’©Ä☺’ಠ_ಠ’' utils.write_file(self.TRACKED_FP, contents=contents) out1 = utils.stdout(gl.diff()) if '+' + contents not in out1: self.fail('out is ' + out1) out2 = utils.stdout(gl.diff(self.TRACKED_FP)) if '+' + contents not in out2: self.fail('out is ' + out2) self.assertEqual(out1, out2)
def test_basic_diff_relative(self): utils.write_file(self.TRACKED_FP, contents='contents_tracked') utils.write_file(self.DIR_TRACKED_FP, contents='contents_dir_tracked') os.chdir(self.DIR) out1 = utils.stdout(gl.diff(_tty_out=False)) if '+contents_tracked' not in out1: self.fail() if '+contents_dir_tracked' not in out1: self.fail() rel_dir_tracked_fp = os.path.relpath(self.DIR_TRACKED_FP, self.DIR) out2 = utils.stdout(gl.diff(o=rel_dir_tracked_fp, _tty_out=False)) if '+contents_dir_tracked' not in out2: self.fail()
def test_status_rm(self): os.remove(TRACKED_FP) st = self.curr_b.status_file(TRACKED_FP) self.assertEqual(core.GL_STATUS_TRACKED, st.type) self.assertTrue(st.modified) self.assertTrue(st.exists_at_head) self.assertFalse(st.exists_in_wd) utils_lib.write_file(TRACKED_FP, contents=TRACKED_FP_CONTENTS_2) st = self.curr_b.status_file(TRACKED_FP) self.assertEqual(core.GL_STATUS_TRACKED, st.type) self.assertFalse(st.modified) self.assertTrue(st.exists_at_head) self.assertTrue(st.exists_in_wd)
def setUp(self): super(TestBranch, self).setUp() # Build up an interesting mock repo. utils_lib.write_file(TRACKED_FP, contents=TRACKED_FP_CONTENTS_1) git.add(TRACKED_FP) git.commit(TRACKED_FP, m='1') utils_lib.write_file(TRACKED_FP, contents=TRACKED_FP_CONTENTS_2) git.commit(TRACKED_FP, m='2') utils_lib.write_file(UNTRACKED_FP, contents=UNTRACKED_FP_CONTENTS) utils_lib.write_file('.gitignore', contents='{0}'.format(IGNORED_FP)) utils_lib.write_file(IGNORED_FP) git.branch(BRANCH) self.curr_b = self.repo.current_branch
def test_diff_basic(self): utils_lib.write_file(TRACKED_FP, contents='new contents') patch = self.curr_b.diff_file(TRACKED_FP) self.assertEqual(1, patch.line_stats[1]) self.assertEqual(1, patch.line_stats[2]) self.assertEqual(1, len(patch.hunks)) hunk = list(patch.hunks)[0] self.assertEqual(3, len(hunk.lines)) self.assertEqual('-', hunk.lines[0].origin) self.assertEqual(TRACKED_FP_CONTENTS_2, hunk.lines[0].content) self.assertEqual('+', hunk.lines[1].origin) self.assertEqual('new contents', hunk.lines[1].content)
def test_diff_nontracked(self): fps = [ UNTRACKED_FP, UNTRACKED_FP_WITH_SPACE, IGNORED_FP, IGNORED_FP_WITH_SPACE] for fp in fps: utils_lib.write_file(fp, contents='new contents') patch = self.curr_b.diff_file(fp) self.assertEqual(1, patch.line_stats[1]) self.assertEqual(0, patch.line_stats[2]) self.assertEqual(1, len(patch.hunks)) hunk = list(patch.hunks)[0] self.assertEqual(2, len(hunk.lines)) self.assertEqual('+', hunk.lines[0].origin) self.assertEqual('new contents', hunk.lines[0].content)
def test_status_relative(self): utils.write_file(self.TRACKED_DIR_FP, contents='some modifications') st = utils.stdout(gl.status()) if self.TRACKED_DIR_FP not in st: self.fail() if self.UNTRACKED_DIR_FP not in st: self.fail() os.chdir(self.DIR) st = utils.stdout(gl.status()) rel_tracked = os.path.relpath(self.TRACKED_DIR_FP, self.DIR) rel_untracked = os.path.relpath(self.UNTRACKED_DIR_FP, self.DIR) if (self.TRACKED_DIR_FP in st) or (rel_tracked not in st): self.fail() if (self.UNTRACKED_DIR_FP in st) or (rel_untracked not in st): self.fail()
def test_status_relative(self): utils.write_file(self.TRACKED_DIR_FP, contents='some modifications') st = utils.stdout(gl.status(_tty_out=False)) if self.TRACKED_DIR_FP not in st: self.fail() if self.UNTRACKED_DIR_FP not in st: self.fail() os.chdir(self.DIR) st = utils.stdout(gl.status(_tty_out=False)) rel_tracked = os.path.relpath(self.TRACKED_DIR_FP, self.DIR) rel_untracked = os.path.relpath(self.UNTRACKED_DIR_FP, self.DIR) if (self.TRACKED_DIR_FP in st) or (rel_tracked not in st): self.fail() if (self.UNTRACKED_DIR_FP in st) or (rel_untracked not in st): self.fail()
def test_diff_nontracked(self): fps = [ UNTRACKED_FP, UNTRACKED_FP_WITH_SPACE, IGNORED_FP, IGNORED_FP_WITH_SPACE ] for fp in fps: utils_lib.write_file(fp, contents='new contents') patch = self.curr_b.diff_file(fp) self.assertEqual(1, patch.line_stats[1]) self.assertEqual(0, patch.line_stats[2]) self.assertEqual(1, len(patch.hunks)) hunk = list(patch.hunks)[0] self.assertEqual(2, len(hunk.lines)) self.assertEqual('+', hunk.lines[0].origin) self.assertEqual('new contents', hunk.lines[0].content)
def test_conflicts_multiple_uncommitted_changes(self): gl.branch(c='tmp', divergent_point='HEAD~2') gl.switch('tmp') utils.append_to_file(self.MASTER_FILE, contents='conflict') gl.commit(m='will conflict 0') utils.append_to_file(self.MASTER_FILE, contents='conflict') gl.commit(m='will conflict 1') utils.write_file(self.MASTER_FILE, contents='uncommitted') self.assertRaisesRegexp(ErrorReturnCode, 'conflicts', gl.fuse, 'master') gl.resolve(self.MASTER_FILE) self.assertRaisesRegexp( ErrorReturnCode, 'conflicts', gl.commit, m='ci 0 in tmp') gl.resolve(self.MASTER_FILE) self.assertRaisesRegexp( ErrorReturnCode, 'failed to apply', gl.commit, m='ci 1 in tmp') self.__assert_history( self.__build('master') + self.__build('tmp', range(2))) self.assertTrue('Stashed' in utils.read_file(self.MASTER_FILE))
def setUp(self): super(TestFileResolve, self).setUp() # Generate a conflict git.checkout(b='branch') utils_lib.write_file(FP_IN_CONFLICT, contents='branch') utils_lib.write_file(DIR_FP_IN_CONFLICT, contents='branch') git.add(FP_IN_CONFLICT, DIR_FP_IN_CONFLICT) git.commit(FP_IN_CONFLICT, DIR_FP_IN_CONFLICT, m='branch') git.checkout('master') utils_lib.write_file(FP_IN_CONFLICT, contents='master') utils_lib.write_file(DIR_FP_IN_CONFLICT, contents='master') git.add(FP_IN_CONFLICT, DIR_FP_IN_CONFLICT) git.commit(FP_IN_CONFLICT, DIR_FP_IN_CONFLICT, m='master') git.merge('branch', _ok_code=[1])
def setUp(self): super(TestFileResolve, self).setUp() # Generate a conflict bname = 'branch' utils_lib.git('checkout', '-b', bname) utils_lib.write_file(FP_IN_CONFLICT, contents=bname) utils_lib.write_file(DIR_FP_IN_CONFLICT, contents=bname) utils_lib.git('add', FP_IN_CONFLICT, DIR_FP_IN_CONFLICT) utils_lib.git('commit', FP_IN_CONFLICT, DIR_FP_IN_CONFLICT, '-m', bname) utils_lib.git('checkout', 'master') utils_lib.write_file(FP_IN_CONFLICT, contents='master') utils_lib.write_file(DIR_FP_IN_CONFLICT, contents='master') utils_lib.git('add', FP_IN_CONFLICT, DIR_FP_IN_CONFLICT) utils_lib.git('commit', FP_IN_CONFLICT, DIR_FP_IN_CONFLICT, '-m', 'master') try: utils_lib.git('merge', bname) raise Exception('The merge should have failed') except CalledProcessError as e: # we expect the merge to fail pass
def test_status_ignore(self): contents = utils_lib.read_file('.gitignore') + '\n' + TRACKED_FP utils_lib.write_file('.gitignore', contents=contents) # Tracked files can't be ignored st = self.curr_b.status_file(TRACKED_FP) self.assertEqual(core.GL_STATUS_TRACKED, st.type)
def test_uncommitted_changes(self): utils.write_file(self.MASTER_FILE, contents='uncommitted') utils.write_file('master_untracked', contents='uncommitted') gl.merge(self.OTHER) self.assertEqual('uncommitted', utils.read_file(self.MASTER_FILE)) self.assertEqual('uncommitted', utils.read_file('master_untracked'))
def setUp(self): super(TestPerformance, self).setUp() for i in range(0, self.FPS_QTY): fp = 'f' + text(i) utils.write_file(fp, fp)
def setUp(self): super(TestFile, self).setUp() # Build up an interesting mock repo utils_lib.write_file(TRACKED_FP, contents=TRACKED_FP_CONTENTS_1) utils_lib.write_file(TRACKED_FP_WITH_SPACE, contents=TRACKED_FP_CONTENTS_1) utils_lib.write_file(TRACKED_DIR_FP, contents=TRACKED_FP_CONTENTS_1) utils_lib.write_file(TRACKED_DIR_FP_WITH_SPACE, contents=TRACKED_FP_CONTENTS_1) utils_lib.write_file(TRACKED_DIR_DIR_FP, contents=TRACKED_FP_CONTENTS_1) utils_lib.write_file(TRACKED_DIR_DIR_FP_WITH_SPACE, contents=TRACKED_FP_CONTENTS_1) git.add(TRACKED_FP, TRACKED_FP_WITH_SPACE, TRACKED_DIR_FP, TRACKED_DIR_FP_WITH_SPACE, TRACKED_DIR_DIR_FP, TRACKED_DIR_DIR_FP_WITH_SPACE) git.commit(TRACKED_FP, TRACKED_FP_WITH_SPACE, TRACKED_DIR_FP, TRACKED_DIR_FP_WITH_SPACE, TRACKED_DIR_DIR_FP, TRACKED_DIR_DIR_FP_WITH_SPACE, m='1') utils_lib.write_file(TRACKED_FP, contents=TRACKED_FP_CONTENTS_2) utils_lib.write_file(TRACKED_FP_WITH_SPACE, contents=TRACKED_FP_CONTENTS_2) utils_lib.write_file(TRACKED_DIR_FP, contents=TRACKED_FP_CONTENTS_2) utils_lib.write_file(TRACKED_DIR_FP_WITH_SPACE, contents=TRACKED_FP_CONTENTS_2) utils_lib.write_file(TRACKED_DIR_DIR_FP, contents=TRACKED_FP_CONTENTS_2) utils_lib.write_file(TRACKED_DIR_DIR_FP_WITH_SPACE, contents=TRACKED_FP_CONTENTS_2) git.commit(TRACKED_FP, TRACKED_FP_WITH_SPACE, TRACKED_DIR_FP, TRACKED_DIR_FP_WITH_SPACE, TRACKED_DIR_DIR_FP, TRACKED_DIR_DIR_FP_WITH_SPACE, m='2') utils_lib.write_file(UNTRACKED_FP) utils_lib.write_file(UNTRACKED_FP_WITH_SPACE) utils_lib.write_file(UNTRACKED_DIR_FP) utils_lib.write_file(UNTRACKED_DIR_FP_WITH_SPACE) utils_lib.write_file(UNTRACKED_DIR_DIR_FP) utils_lib.write_file(UNTRACKED_DIR_DIR_FP_WITH_SPACE) utils_lib.write_file('.gitignore', contents='{0}\n{1}'.format( IGNORED_FP, IGNORED_FP_WITH_SPACE)) utils_lib.write_file(IGNORED_FP) utils_lib.write_file(IGNORED_FP_WITH_SPACE) self.curr_b = self.repo.current_branch
def test_diff_dir(self): fp = 'dir/dir/f' utils.write_file(fp, contents='contents') out = utils.stdout(gl.diff(o=fp, _tty_out=False)) if '+contents' not in out: self.fail()
def test_basic_functionality(self): utils.write_file('file1', 'Contents of file1') # Track gl.track('file1') self.assertRaises(ErrorReturnCode, gl.track, 'file1') self.assertRaises(ErrorReturnCode, gl.track, 'non-existent') # Untrack gl.untrack('file1') self.assertRaises(ErrorReturnCode, gl.untrack, 'file1') self.assertRaises(ErrorReturnCode, gl.untrack, 'non-existent') # Commit gl.track('file1') gl.commit(m='file1 commit') self.assertRaises(ErrorReturnCode, gl.commit, m='nothing to commit') # History if 'file1 commit' not in utils.stdout(gl.history(_tty_out=False)): self.fail('Commit didn\'t appear in history') # Branch # Make some changes to file1 and branch out utils.write_file('file1', 'New contents of file1') gl.branch(c='branch1') gl.switch('branch1') if 'New' in utils.read_file('file1'): self.fail('Branch not independent!') # Switch back to master branch, check that contents are the same as before. gl.switch('master') if 'New' not in utils.read_file('file1'): self.fail('Branch not independent!') out = utils.stdout(gl.branch(_tty_out=False)) if '* master' not in out: self.fail('Branch status output wrong: {0}'.format(out)) if 'branch1' not in out: self.fail('Branch status output wrong: {0}'.format(out)) gl.branch(c='branch2') gl.branch(c='branch-conflict1') gl.branch(c='branch-conflict2') gl.commit(m='New contents commit') # Fuse gl.switch('branch1') self.assertRaises(ErrorReturnCode, gl.fuse) # no upstream set try: gl.fuse('master') except ErrorReturnCode as e: self.fail(utils.stderr(e)) out = utils.stdout(gl.history(_tty_out=False)) if 'file1 commit' not in out: self.fail(out) # Merge gl.switch('branch2') self.assertRaises(ErrorReturnCode, gl.merge) # no upstream set gl.merge('master') out = utils.stdout(gl.history(_tty_out=False)) if 'file1 commit' not in out: self.fail(out) # Conflicting fuse gl.switch('branch-conflict1') utils.write_file('file1', 'Conflicting changes to file1') gl.commit(m='changes in branch-conflict1') err = utils.stderr(gl.fuse('master', _tty_out=False, _ok_code=[1])) if 'conflict' not in err: self.fail(err) out = utils.stdout(gl.status(_tty_out=False)) if 'file1 (with conflicts)' not in out: self.fail(out) # Try aborting gl.fuse('--abort') out = utils.stdout(gl.status(_tty_out=False)) if 'file1' in out: self.fail(out) # Ok, now let's fix the conflicts err = utils.stderr(gl.fuse('master', _tty_out=False, _ok_code=[1])) if 'conflict' not in err: self.fail(err) out = utils.stdout(gl.status(_tty_out=False)) if 'file1 (with conflicts)' not in out: self.fail(out) utils.write_file('file1', 'Fixed conflicts!') self.assertRaises(ErrorReturnCode, gl.commit, m='resolve not called') self.assertRaises(ErrorReturnCode, gl.resolve, 'non-existent') gl.resolve('file1') gl.commit(m='fixed conflicts')
def setUp(self): super(TestDiffFile, self).setUp() utils.write_file(self.TRACKED_FP) utils.write_file(self.DIR_TRACKED_FP) gl.commit('-o', self.TRACKED_FP, self.DIR_TRACKED_FP, m='commit') utils.write_file(self.UNTRACKED_FP)