FYI: Phabricator's topic branches on Git monorepo

Tobias Grosser via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 5 22:41:18 PDT 2017


On Tue, Jun 6, 2017, at 04:32 AM, NAKAMURA Takumi via llvm-commits
wrote:
> Here's the repository.
> https://github.com/llvm-project/llvm-project-phab/branches
> For now, it is updated manually.
> 
> * What is?
> This fetches all open and visible differentials from
> https://reviews.llvm.org/ via conduit API.
> Based on Git monorepo,
> https://github.com/llvm-project/llvm-project-20170507

Very cool initiative!
 
> Closed diffs will be removed. git-fetch --prune will help.
> 
> * How to play?
> Prerequisite: You are on
> https://github.com/llvm-project/llvm-project-20170507
> $ git remote add phab
> https://github.com/llvm-project/llvm-project-phab.git
> $ git fetch phab --prune
> 
> * How to abandon playing?
> $ git remote rm phab
> 
> * Future plans
> - Implement building topic branches with http://bb.pgr.jp/
> - Synthesize and provide "dev/trunk" with merging topic branches
> - Interact with https://reviews.llvm.org/ for building results

This sounds very exciting. I am especially excited to use something
similar at some point for performance builds. Looking forward to watch
your progress!

Best,
Tobias

>
> 
> * Issues
> - Not all diffs can be generated. They might have unknown changes in
> their
> parents.
> - Changes are not cascaded unless each change points a preceding change.
> - If diffs don't have "Modified" files but "New" files, branches cannot
> be
> made.
>   Heuristics depends on "orig" context of diff.
> - Due to lack of conduit API, this has to fetch whole diff with
> https://reviews.llvm.org/api/differential.querydiffs
>   It has hundreds kilobytes of changes if it is generated from full
>   context
> diff.
>   Therefore, I won't run this automatically.
>   (Let me know if there's an expert of conduit API)
> - Each diff's author doesn't have full fields. API can know his name but
> not his mailto.
>   (I could retrieve possible fields in trunk with his name...)
> 
> * How this works?
> This relies on many heuristics.
> - If a diff is full-context, calculate its each hash as git blob.
> - Traverse the tree and walk revisions and check blobs' hashes matching;
>   1) Preceding diffs in the same topic
>   2) Just the commit, if a diff knows SVN revision number
>   3) The newest commit in trunk with git-log --before (changes' ctime)
>   4) All visible branches with git-log --branches
>   5) Walk down changes (1)-(4) to (ctime - 28 days)
>   6) (Also if a diff isn't full-context) Try applying patches to an
>   actual
> tree with git-apply
> 
> Arigato, Takumi
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list