Example #1
0
 def test_fetch_pack(self):
     c = self._client()
     with repo.Repo(os.path.join(self.gitroot, 'dest')) as dest:
         result = c.fetch(self._build_path('/server_new.export'), dest)
         for r in result.refs.items():
             dest.refs.set_if_equals(r[0], None, r[1])
         self.assertDestEqualsSrc()
Example #2
0
    def test_get_refs(self):
        c = self._client()
        refs = c.get_refs(self._build_path('/server_new.export'))

        repo_dir = os.path.join(self.gitroot, 'server_new.export')
        with repo.Repo(repo_dir) as dest:
            self.assertDictEqual(dest.refs.as_dict(), refs)
Example #3
0
 def disable_ff_and_make_dummy_commit(self):
     # disable non-fast-forward pushes to the server
     dest = repo.Repo(os.path.join(self.gitroot, 'dest'))
     run_git_or_fail(['config', 'receive.denyNonFastForwards', 'true'],
                     cwd=dest.path)
     commit_id = self.make_dummy_commit(dest)
     return dest, commit_id
Example #4
0
 def test_fetch_pack_no_side_band_64k(self):
     c = self._client()
     c._fetch_capabilities.remove(b'side-band-64k')
     with repo.Repo(os.path.join(self.gitroot, 'dest')) as dest:
         result = c.fetch(self._build_path('/server_new.export'), dest)
         for r in result.refs.items():
             dest.refs.set_if_equals(r[0], None, r[1])
         self.assertDestEqualsSrc()
Example #5
0
 def _do_send_pack(self):
     c = self._client()
     srcpath = os.path.join(self.gitroot, 'server_new.export')
     with repo.Repo(srcpath) as src:
         sendrefs = dict(src.get_refs())
         del sendrefs[b'HEAD']
         c.send_pack(self._build_path('/dest'), lambda _: sendrefs,
                     src.object_store.generate_pack_data)
Example #6
0
 def test_fetch_pack_zero_sha(self):
     # zero sha1s are already present on the client, and should
     # be ignored
     c = self._client()
     with repo.Repo(os.path.join(self.gitroot, 'dest')) as dest:
         result = c.fetch(
             self._build_path('/server_new.export'), dest,
             lambda refs: [protocol.ZERO_SHA])
         for r in result.refs.items():
             dest.refs.set_if_equals(r[0], None, r[1])
Example #7
0
 def test_send_without_report_status(self):
     c = self._client()
     c._send_capabilities.remove(b'report-status')
     srcpath = os.path.join(self.gitroot, 'server_new.export')
     with repo.Repo(srcpath) as src:
         sendrefs = dict(src.get_refs())
         del sendrefs[b'HEAD']
         c.send_pack(self._build_path('/dest'), lambda _: sendrefs,
                     src.object_store.generate_pack_data)
         self.assertDestEqualsSrc()
Example #8
0
 def test_incremental_fetch_pack(self):
     self.test_fetch_pack()
     dest, dummy = self.disable_ff_and_make_dummy_commit()
     dest.refs[b'refs/heads/master'] = dummy
     c = self._client()
     repo_dir = os.path.join(self.gitroot, 'server_new.export')
     with repo.Repo(repo_dir) as dest:
         result = c.fetch(self._build_path('/dest'), dest)
         for r in result.refs.items():
             dest.refs.set_if_equals(r[0], None, r[1])
         self.assertDestEqualsSrc()
Example #9
0
    def test_send_remove_branch(self):
        with repo.Repo(os.path.join(self.gitroot, 'dest')) as dest:
            dummy_commit = self.make_dummy_commit(dest)
            dest.refs[b'refs/heads/master'] = dummy_commit
            dest.refs[b'refs/heads/abranch'] = dummy_commit
            sendrefs = dict(dest.refs)
            sendrefs[b'refs/heads/abranch'] = b"00" * 20
            del sendrefs[b'HEAD']

            def gen_pack(have, want, ofs_delta=False):
                return 0, []
            c = self._client()
            self.assertEqual(dest.refs[b"refs/heads/abranch"], dummy_commit)
            c.send_pack(
                self._build_path('/dest'), lambda _: sendrefs, gen_pack)
            self.assertFalse(b"refs/heads/abranch" in dest.refs)
Example #10
0
 def test_send_pack_one_error(self):
     dest, dummy_commit = self.disable_ff_and_make_dummy_commit()
     dest.refs[b'refs/heads/master'] = dummy_commit
     repo_dir = os.path.join(self.gitroot, 'server_new.export')
     with repo.Repo(repo_dir) as src:
         sendrefs, gen_pack = self.compute_send(src)
         c = self._client()
         try:
             c.send_pack(self._build_path('/dest'),
                         lambda _: sendrefs, gen_pack)
         except errors.UpdateRefsError as e:
             self.assertEqual('refs/heads/master failed to update',
                              e.args[0])
             self.assertEqual({b'refs/heads/branch': b'ok',
                               b'refs/heads/master': b'non-fast-forward'},
                              e.ref_status)
Example #11
0
 def test_push_remove_branch(self):
     def determine_wants(*args):
         return {"refs/heads/pullr-108": objects.ZERO_SHA,
                 "refs/heads/master":
                 local_repo.refs['refs/heads/master'],
                 "refs/heads/mybranch":
                 local_repo.refs['refs/heads/mybranch'],
                 }
     self.test_push_multiple_branch()
     local_repo = repo.Repo(self.temp_d)
     tcp_client = client.TCPGitClient(self.server_address,
                                      port=self.port)
     tcp_client.send_pack(self.fakerepo,
                          determine_wants,
                          local_repo.object_store.generate_pack_data)
     swift_repo = swift.SwiftRepo("fakerepo", self.conf)
     self.assertNotIn('refs/heads/pullr-108', swift_repo.refs.allkeys())
Example #12
0
 def test_send_pack_multiple_errors(self):
     dest, dummy = self.disable_ff_and_make_dummy_commit()
     # set up for two non-ff errors
     branch, master = b'refs/heads/branch', b'refs/heads/master'
     dest.refs[branch] = dest.refs[master] = dummy
     repo_dir = os.path.join(self.gitroot, 'server_new.export')
     with repo.Repo(repo_dir) as src:
         sendrefs, gen_pack = self.compute_send(src)
         c = self._client()
         try:
             c.send_pack(self._build_path('/dest'), lambda _: sendrefs,
                         gen_pack)
         except errors.UpdateRefsError as e:
             self.assertIn(
                     str(e),
                     ['{0}, {1} failed to update'.format(
                         branch.decode('ascii'), master.decode('ascii')),
                      '{1}, {0} failed to update'.format(
                          branch.decode('ascii'), master.decode('ascii'))])
             self.assertEqual({branch: b'non-fast-forward',
                               master: b'non-fast-forward'},
                              e.ref_status)
Example #13
0
 def assertDestEqualsSrc(self):
     repo_dir = os.path.join(self.gitroot, 'server_new.export')
     dest_repo_dir = os.path.join(self.gitroot, 'dest')
     with repo.Repo(repo_dir) as src:
         with repo.Repo(dest_repo_dir) as dest:
             self.assertReposEqual(src, dest)