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_commit_only_relative(self): os.chdir(self.DIR) self.assertRaises(ErrorReturnCode, gl.commit, o=self.TRACKED_FP, m='msg') gl.commit(o='../' + self.TRACKED_FP, m='msg') self.__assert_commit(self.TRACKED_FP)
def create_commits(branch_name, fp): self.commits[branch_name] = [] utils.append_to_file(fp, contents='contents {0}\n'.format(0)) out = utils.stdout(gl.commit(m='ci 0 in {0}'.format(branch_name), inc=fp)) self.commits[branch_name].append( re.search(r'Commit Id: (.*)', out, re.UNICODE).group(1)) for i in range(1, self.COMMITS_NUMBER): utils.append_to_file(fp, contents='contents {0}\n'.format(i)) out = utils.stdout(gl.commit(m='ci {0} in {1}'.format(i, branch_name))) self.commits[branch_name].append( re.search(r'Commit Id: (.*)', out, re.UNICODE).group(1))
def test_conflicts(self): def trigger_conflicts(): self.assertRaisesRegexp( ErrorReturnCode, 'conflicts', gl.fuse, self.OTHER, e=self.commits[self.OTHER][0]) # Abort trigger_conflicts() gl.fuse('-a') self.__assert_history(self.__build('master')) # Fix conflicts trigger_conflicts() 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'))
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_branch_switch_performance(self): MAX_TOLERANCE = 100 gl.commit(o='f1', m='commit') t = time.time() gl.branch(c='develop') gl.switch('develop') gl_t = time.time() - t # go back to previous state gl.switch('master') # do the same for git t = time.time() git.branch('gitdev') git.stash.save('--all') git.checkout('gitdev') git_t = time.time() - t self.assertTrue( gl_t < git_t*MAX_TOLERANCE, msg='gl_t {0}, git_t {1}'.format(gl_t, git_t))
def test_conflicts_multiple(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') 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) gl.commit(m='ci 1 in tmp') # this one should finalize the fuse self.__assert_history( self.__build('master') + self.__build('tmp', range(2)))
def setUp(self): super(TestStatus, self).setUp() utils.write_file(self.TRACKED_DIR_FP) utils.write_file(self.UNTRACKED_DIR_FP) gl.commit(o=self.TRACKED_DIR_FP, m='commit')
def test_commit(self): gl.commit(m='msg') self.__assert_commit(self.TRACKED_FP, self.DIR_TRACKED_FP)
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_commit_only(self): gl.commit(o=self.TRACKED_FP, m='msg') self.__assert_commit(self.TRACKED_FP)
def test_commit_relative(self): os.chdir(self.DIR) gl.commit(m='msg') self.__assert_commit(self.TRACKED_FP, self.DIR_TRACKED_FP)
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)
def test_commit_only_untrack(self): gl.commit(o=self.UNTRACKED_FP, m='msg') self.__assert_commit(self.UNTRACKED_FP)
def setUp(self): super(TestBranch, self).setUp() utils.write_file('f') gl.commit(o='f', m='commit')
def test_commit_dir(self): fp = 'dir/f' utils.write_file(fp) gl.commit(o=fp, m='msg') self.__assert_commit('dir/f')
def test_commit_exclude_include(self): gl.commit(m='msg', include=self.UNTRACKED_FP, exclude=self.TRACKED_FP) self.__assert_commit(self.UNTRACKED_FP, self.DIR_TRACKED_FP)
def test_commit_only_untrack_relative(self): os.chdir(self.DIR) self.assertRaises(ErrorReturnCode, gl.commit, o=self.UNTRACKED_FP, m='msg') gl.commit(o='../' + self.UNTRACKED_FP, m='msg') self.__assert_commit(self.UNTRACKED_FP)