[PATCH] Add a source_tree field to Project.

Dirk Wallenstein halsmit at t-online.de
Sat Apr 2 01:08:30 EST 2011


On Fri, Apr 01, 2011 at 01:43:06PM +0000, Guilherme Salgado wrote:
> On Fri, 2011-04-01 at 13:01 +0200, Dirk Wallenstein wrote:
> > On Wed, Mar 30, 2011 at 06:25:12PM -0300, Guilherme Salgado wrote:
> > > On Wed, 2011-03-30 at 12:10 +0800, Jeremy Kerr wrote:
> [...]
> > > +def ensure_source_checkout_for_project(project):
> > > +    forest = '/home/salgado/src' # This is where we store the trees we checkout
> > > +    root = os.path.join(forest, project.linkname)
> > > +    if not os.path.exists(root):
> > > +        repo = Repo.init(root, mkdir=True)
> > > +    else:
> > > +        repo = Repo(root)
> > > +
> > > +    transport, path = get_transport_and_path(project.source_tree)
> > > +    refs = transport.fetch(path, repo)
> > > +    # XXX: Is this the appropriate thing to do?  will there always be a master
> > > +    # branch?
> > > +    repo.refs['refs/heads/master'] = refs['HEAD']
> > > +    return repo
> > > +
> > > +
> > > +def get_hashes_for_commits(repo, stop_at):
> > > +    # We don't care about the first commit, but if needed it should be
> > > +    # possible to diff it against an empty tree and yield its hash as well.
> > > +    commit = repo['HEAD']
> > > +
> > > +    while len(commit.parents) > 0:
> > > +        commit_id = commit.id
> > > +        if commit_id == stop_at:
> > > +            break
> > > +
> > > +        parent = repo[commit.parents[0]]
> > 
> > What about possible other parents?  I would say every merged branch has
> > to be inspected until the merge-base of the immediate predecessors --
> 
> That's one of the reasons that led me to run git as a subprocess instead
> of using python-dulwich. In a followup to this thread I sent a new
> version of this patch which uses just git.
> 
> > maybe recursion works here.  I forgot to mention Git-Python in the other
> > mail.  It has a wrapper to execute git commands with python syntax.
> > That can facilitate such things.
> > 
> > https://github.com/gitpython-developers/GitPython
> 
> Oh, cool, I'll have a look at that.

I would say, the commits to inspect are basically:
  gitpythonrepo.git.rev_list(no_merges=True, 'HEAD', '^' + stop_at)

-- 
Cheers,
  Dirk


More information about the Patchwork mailing list