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_status_performance(): # The test fails if `gl status` takes more than 100 times # the time `git status` took. MAX_TOLERANCE = 100 t = time.time() gl.status() gl_t = time.time() - t t = time.time() git.status() 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 assert_status_performance(): # The test fails if `gl status` takes more than 100 times # the time `git status` took. MAX_TOLERANCE = 100 t = time.time() gl.status() gl_t = time.time() - t t = time.time() git.status() 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 __assert_history(self, expected): out = utils.stdout(gl.history()) cids = list(reversed(re.findall(r'ci (.*) in (\S*)', out, re.UNICODE))) self.assertItemsEqual( cids, expected, 'cids is ' + text(cids) + ' exp ' + text(expected)) st_out = utils.stdout(gl.status()) self.assertFalse('fuse' in st_out)
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 __assert_history(self, expected): out = utils.stdout(gl.history(_tty_out=False)) cids = list(reversed(re.findall(r'ci (.*) in (.*)', out, re.UNICODE))) self.assertEqual( cids, expected, 'cids is ' + text(cids) + ' exp ' + text(expected)) st_out = utils.stdout(gl.status()) self.assertFalse('fuse' in st_out)
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_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')
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')