def test_tree_copy_after_update(self): """Check Tree.id is correctly updated when the tree is copied after updated. """ shas = [] tree = Tree() shas.append(tree.id) tree.add(b'data', 0o644, Blob().id) copied = tree.copy() shas.append(tree.id) shas.append(copied.id) self.assertNotIn(shas[0], shas[1:]) self.assertEqual(shas[1], shas[2])
def checkout(self, commit=None, branch=None, retry=True): if commit is not None and isinstance(commit, string_types): commit = self.repo._repo.get_object(commit) if not commit: branches = OrderedDict( (('refs/heads/%s' % branch or 'master', 1), ('refs/heads/master', 1))) for ref in branches: try: _commit_id = self.repo._repo.refs[ref] except KeyError: pass else: try: commit = self.repo._repo.get_object(_commit_id) except ObjectMissing: if ref != 'refs/heads/master': del self.repo._repo.refs[ref] else: six.reraise(*sys.exc_info()) else: break if commit is not None and isinstance(commit, string_types): commit = self.repo._repo.get_object(commit) self._commit = commit if commit is None: tree = Tree() else: try: tree = self.repo._repo.get_object(commit.tree) except ObjectMissing: if retry and branch is not None: if branch != 'master': del self.repo._repo.refs['refs/heads/%s' % branch] return self.checkout(branch='master', retry=False) else: six.reraise(*sys.exc_info()) self._tree = tree self._working_tree = tree.copy() self._blobs = {}
def checkout(self, commit=None, branch=None, retry=True): if commit is not None and isinstance(commit, string_types): commit = self.repo._repo.get_object(commit) if not commit: branches = OrderedDict((('refs/heads/%s' % branch or 'master', 1), ('refs/heads/master', 1))) for ref in branches: try: _commit_id = self.repo._repo.refs[ref] except KeyError: pass else: try: commit = self.repo._repo.get_object(_commit_id) except ObjectMissing: if ref != 'refs/heads/master': del self.repo._repo.refs[ref] else: six.reraise(*sys.exc_info()) else: break if commit is not None and isinstance(commit, string_types): commit = self.repo._repo.get_object(commit) self._commit = commit if commit is None: tree = Tree() else: try: tree = self.repo._repo.get_object(commit.tree) except ObjectMissing: if retry and branch is not None: if branch != 'master': del self.repo._repo.refs['refs/heads/%s' % branch] return self.checkout(branch='master', retry=False) else: six.reraise(*sys.exc_info()) self._tree = tree self._working_tree = tree.copy() self._blobs = {}
def checkout(self, commit=None, branch=None, retry=True): if self._tree != self._working_tree: raise IOError('Can only switch from a clean repository') if commit is not None and isinstance(commit, string_types): commit = self.repo._repo.get_object(commit) if not commit: for ref in {'refs/heads/%s' % branch, 'refs/heads/master'}: try: _commit_id = self.repo._repo.refs[ref] except KeyError: pass else: try: commit = self.repo._repo.get_object(_commit_id) except ObjectMissing: if ref != 'refs/heads/master': del self.repo._repo.refs[ref] else: six.reraise(*sys.exc_info()) else: break if commit is not None and isinstance(commit, string_types): commit = self.repo._repo.get_object(commit) self._commit = commit if commit is None: tree = Tree() else: try: tree = self.repo._repo.get_object(commit.tree) except ObjectMissing: if retry and branch is not None: if branch != 'master': del self.repo._repo.refs['refs/heads/%s' % branch] return self.checkout(branch='master', retry=False) else: six.reraise(*sys.exc_info()) self._tree = tree self._working_tree = tree.copy() self._blobs = {}
def checkout(self, commit=None, branch=None): if self._tree != self._working_tree: raise IOError('Can only switch from a clean repository') if commit is not None and isinstance(commit, string_types): commit = self.repo._repo.get_object(commit) if not commit: for ref in {'refs/heads/%s' % branch, 'refs/heads/master'}: try: _commit_id = self.repo._repo.refs[ref] except KeyError: pass else: commit = self.repo._repo.get_object(_commit_id) break if commit is not None and isinstance(commit, string_types): commit = self.repo._repo.get_object(commit) self._commit = commit if commit is None: tree = Tree() else: tree = self.repo._repo.get_object(commit.tree) self._tree = tree self._working_tree = tree.copy() self._blobs = {}