Hello, git bisect helped me today in tracking down a regression in LLVM/Clang. Because LLVM/Clang code is split across multiple git repositories, there were a few obstacles to overcome prior to using git bisect. I thought I would share them here, in the hope that they're useful for others. The main difficulty was to check out the version of clang and compiler-rt that would compile with a given LLVM revision. I used the following code in the bisect script: checkout() { cd $LLVM_SRC local committer_date="$(git log --pretty=format:%cd -n1 'HEAD')" cd $LLVM_SRC/tools/clang git checkout "$(git rev-list -n 1 --before="$committer_date" origin/google/testing)" cd $LLVM_SRC/projects/compiler-rt git checkout "$(git rev-list -n 1 --before="$committer_date" origin/google/testing)" } build() { cd $LLVM_BUILD ninja } # Go for it! checkout || exit 125 build || exit 125 run_test The code will, for a given LLVM revision, checkout the latest revision from the google/testing branch for both clang and compiler-rt. It will then compile everything. If either fails, the script exits with code 125, which tells git bisect to skip the current commit and try another one. Hope this helps! Jonas -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140704/582164d4/attachment.html>
Check out chapuni's unified git tree for the entire SVN repo: https://github.com/chapuni/llvm-project -- Sean Silva On Fri, Jul 4, 2014 at 12:05 PM, Jonas Wagner <jonas.wagner at epfl.ch> wrote:> Hello, > > git bisect helped me today in tracking down a regression in LLVM/Clang. > Because LLVM/Clang code is split across multiple git repositories, there > were a few obstacles to overcome prior to using git bisect. I thought I > would share them here, in the hope that they're useful for others. > > The main difficulty was to check out the version of clang and compiler-rt > that would compile with a given LLVM revision. I used the following code in > the bisect script: > > checkout() { > cd $LLVM_SRC > local committer_date="$(git log --pretty=format:%cd -n1 'HEAD')" > cd $LLVM_SRC/tools/clang > git checkout "$(git rev-list -n 1 --before="$committer_date" > origin/google/testing)" > cd $LLVM_SRC/projects/compiler-rt > git checkout "$(git rev-list -n 1 --before="$committer_date" > origin/google/testing)" > } > > build() { > cd $LLVM_BUILD > ninja > } > > # Go for it! > checkout || exit 125 > build || exit 125 > run_test > > The code will, for a given LLVM revision, checkout the latest revision > from the google/testing branch for both clang and compiler-rt. It will then > compile everything. If either fails, the script exits with code 125, which > tells git bisect to skip the current commit and try another one. > > Hope this helps! > Jonas > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140704/319364d7/attachment.html>
We're using a very similar script to the one posted to the list FWIW. Separate git repositories work with git-svn dcommit and have compatible commit IDs with the official git mirror, which isn't the case with all-in-one repositories, so it's definitely a worthwhile approach. (Now, if we could do this with git submodules instead of git subtrees, that *would* be cool but I don't think the support is there.) Thanks for sharing Jonas Alp. On 04/07/2014 22:49, Sean Silva wrote:> Check out chapuni's unified git tree for the entire SVN repo: > > https://github.com/chapuni/llvm-project > > -- Sean Silva > > > On Fri, Jul 4, 2014 at 12:05 PM, Jonas Wagner <jonas.wagner at epfl.ch > <mailto:jonas.wagner at epfl.ch>> wrote: > > Hello, > > git bisect helped me today in tracking down a regression in > LLVM/Clang. Because LLVM/Clang code is split across multiple git > repositories, there were a few obstacles to overcome prior to > using git bisect. I thought I would share them here, in the hope > that they're useful for others. > > The main difficulty was to check out the version of clang and > compiler-rt that would compile with a given LLVM revision. I used > the following code in the bisect script: > > checkout() { > cd $LLVM_SRC > local committer_date="$(git log --pretty=format:%cd -n1 > 'HEAD')" > cd $LLVM_SRC/tools/clang > git checkout "$(git rev-list -n 1 > --before="$committer_date" origin/google/testing)" > cd $LLVM_SRC/projects/compiler-rt > git checkout "$(git rev-list -n 1 > --before="$committer_date" origin/google/testing)" > } > > build() { > cd $LLVM_BUILD > ninja > } > > # Go for it! > checkout || exit 125 > build || exit 125 > run_test > > The code will, for a given LLVM revision, checkout the latest > revision from the google/testing branch for both clang and > compiler-rt. It will then compile everything. If either fails, the > script exits with code 125, which tells git bisect to skip the > current commit and try another one. > > Hope this helps! > Jonas > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu <mailto:LLVMdev at cs.uiuc.edu> > http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > > > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev-- http://www.nuanti.com the browser experts