示例#1
0
    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))
示例#2
0
  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))
示例#3
0
    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)
示例#4
0
  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)
示例#5
0
 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)
示例#6
0
 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)
示例#7
0
 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)
示例#8
0
 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)
示例#9
0
 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))
示例#10
0
 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))
示例#11
0
 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)
示例#12
0
 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)
示例#13
0
 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()
示例#14
0
 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()
示例#15
0
  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()
示例#16
0
    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()
示例#17
0
 def test_remove(self):
   gl.branch(c=self.BRANCH_1)
   gl.switch(self.BRANCH_1)
   self.assertRaises(ErrorReturnCode, gl.branch, d=self.BRANCH_1, _in='y')
   gl.branch(c=self.BRANCH_2)
   gl.switch(self.BRANCH_2)
   gl.branch(d=self.BRANCH_1, _in='n')
   gl.branch(d=self.BRANCH_1, _in='y')
   if self.BRANCH_1 in utils.stdout(gl.branch(_tty_out=False)):
     self.fail()
示例#18
0
 def __assert_commit(self, *expected_committed):
   h = utils.stdout(gl.history(v=True, _tty_out=False))
   for fp in expected_committed:
     if fp not in h:
       self.fail('{0} was apparently not committed!'.format(fp))
   expected_not_committed = [
       fp for fp in self.FPS if fp not in expected_committed]
   for fp in expected_not_committed:
     if fp in h:
       self.fail('{0} was apparently committed!'.format(fp))
示例#19
0
 def __assert_commit(self, *expected_committed):
   h = utils.stdout(gl.history(v=True, _tty_out=False))
   for fp in expected_committed:
     if fp not in h:
       self.fail('{0} was apparently not committed!'.format(fp))
   expected_not_committed = [
       fp for fp in self.FPS if fp not in expected_committed]
   for fp in expected_not_committed:
     if fp in h:
       self.fail('{0} was apparently committed!'.format(fp))
示例#20
0
 def test_remove(self):
     gl.branch(c=self.BRANCH_1)
     gl.switch(self.BRANCH_1)
     self.assertRaises(ErrorReturnCode, gl.branch, d=self.BRANCH_1, _in='y')
     gl.branch(c=self.BRANCH_2)
     gl.switch(self.BRANCH_2)
     gl.branch(d=self.BRANCH_1, _in='n')
     gl.branch(d=self.BRANCH_1, _in='y')
     if self.BRANCH_1 in utils.stdout(gl.branch()):
         self.fail()
示例#21
0
 def test_diff_dir(self):
     fp = 'dir/dir/f'
     utils.write_file(fp, contents='contents')
     out = utils.stdout(gl.diff(fp))
     if '+contents' not in out:
         self.fail()
示例#22
0
 def test_create(self):
   gl.branch(c=self.BRANCH_1)
   self.assertRaises(ErrorReturnCode, gl.branch, c=self.BRANCH_1)
   self.assertRaises(ErrorReturnCode, gl.branch, c='evil*named*branch')
   if self.BRANCH_1 not in utils.stdout(gl.branch(_tty_out=False)):
     self.fail()
示例#23
0
 def test_empty_diff(self):
     if 'No files to diff' not in utils.stdout(gl.diff()):
         self.fail()
示例#24
0
 def test_list(self):
     gl.tag(c=self.TAG_1)
     gl.tag(c=self.TAG_2)
     tag_out = utils.stdout(gl.tag())
     self.assertTrue(tag_out.find(self.TAG_1) < tag_out.find(self.TAG_2))
示例#25
0
 def test_remove(self):
     gl.tag(c=self.TAG_1)
     gl.tag(d=self.TAG_1, _in='n')
     gl.tag(d=self.TAG_1, _in='y')
     if self.TAG_1 in utils.stdout(gl.tag()):
         self.fail()
示例#26
0
 def test_create(self):
     gl.tag(c=self.TAG_1)
     self.assertRaises(ErrorReturnCode, gl.tag, c=self.TAG_1)
     self.assertRaises(ErrorReturnCode, gl.tag, c='evil*named*tag')
     if self.TAG_1 not in utils.stdout(gl.tag()):
         self.fail()
示例#27
0
 def test_list(self):
     gl.branch(c=self.BRANCH_1)
     gl.branch(c=self.BRANCH_2)
     branch_out = utils.stdout(gl.branch())
     self.assertTrue(
         branch_out.find(self.BRANCH_1) < branch_out.find(self.BRANCH_2))
示例#28
0
 def test_empty_diff(self):
   if 'No files to diff' not in utils.stdout(gl.diff(_tty_out=False)):
     self.fail()
示例#29
0
 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()
示例#30
0
  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')
示例#31
0
 def test_create(self):
   gl.tag(c=self.TAG_1)
   self.assertRaises(ErrorReturnCode, gl.tag, c=self.TAG_1)
   self.assertRaises(ErrorReturnCode, gl.tag, c='evil*named*tag')
   if self.TAG_1 not in utils.stdout(gl.tag()):
     self.fail()
示例#32
0
 def test_list(self):
   gl.tag(c=self.TAG_1)
   gl.tag(c=self.TAG_2)
   tag_out = utils.stdout(gl.tag())
   self.assertTrue(
       tag_out.find(self.TAG_1) < tag_out.find(self.TAG_2))
示例#33
0
 def test_remove(self):
   gl.tag(c=self.TAG_1)
   gl.tag(d=self.TAG_1, _in='n')
   gl.tag(d=self.TAG_1, _in='y')
   if self.TAG_1 in utils.stdout(gl.tag()):
     self.fail()
示例#34
0
 def test_create(self):
     gl.branch(c=self.BRANCH_1)
     self.assertRaises(ErrorReturnCode, gl.branch, c=self.BRANCH_1)
     self.assertRaises(ErrorReturnCode, gl.branch, c='evil*named*branch')
     if self.BRANCH_1 not in utils.stdout(gl.branch()):
         self.fail()
示例#35
0
    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')
示例#36
0
 def test_list(self):
   gl.branch(c=self.BRANCH_1)
   gl.branch(c=self.BRANCH_2)
   branch_out = utils.stdout(gl.branch())
   self.assertTrue(
       branch_out.find(self.BRANCH_1) < branch_out.find(self.BRANCH_2))