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_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 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_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 __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_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 __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_create(self): self.repo.create_branch('branch1', self.repo.current_branch.head) self.repo.switch_current_branch(self.repo.lookup_branch('branch1')) self.assertTrue(os.path.exists(TRACKED_FP)) self.assertEqual(TRACKED_FP_CONTENTS_2, utils_lib.read_file(TRACKED_FP)) self.assertFalse(os.path.exists(UNTRACKED_FP)) self.assertFalse(os.path.exists(IGNORED_FP)) self.assertFalse(os.path.exists('.gitignore'))
def test_create_from_prev_commit(self): self.repo.create_branch('branch1', self.repo.revparse_single('HEAD^')) self.repo.switch_current_branch(self.repo.lookup_branch('branch1')) self.assertTrue(os.path.exists(TRACKED_FP)) self.assertEqual(TRACKED_FP_CONTENTS_1, utils_lib.read_file(TRACKED_FP)) self.assertFalse(os.path.exists(UNTRACKED_FP)) self.assertFalse(os.path.exists(IGNORED_FP)) self.assertFalse(os.path.exists('.gitignore'))
def test_uncommitted_tracked_changes_that_conflict_append(self): gl.branch(c='tmp', divergent_point='HEAD~1') gl.switch('tmp') utils.append_to_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_uncommitted_tracked_changes_that_conflict_append(self): gl.branch(c='tmp', divergent_point='HEAD~1') gl.switch('tmp') utils.append_to_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_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_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 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 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()): 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()) 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()) 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()) 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', _ok_code=[1])) if 'conflict' not in err: self.fail(err) out = utils.stdout(gl.status()) if 'file1 (with conflicts)' not in out: self.fail(out) # Try aborting gl.fuse('--abort') out = utils.stdout(gl.status()) if 'file1' in out: self.fail(out) # Ok, now let's fix the conflicts err = utils.stderr(gl.fuse('master', _ok_code=[1])) if 'conflict' not in err: self.fail(err) out = utils.stdout(gl.status()) 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')