Thanks Eric. That's exactly what we were hoping to achieve: "shift-left" <https://en.wikipedia.org/wiki/Shift-left_testing>. In fact, the next step is to give users the ability to run the full test suite directly from their laptops, and not have to wait for Github to run an Action. I think that way is better - mostly because I prefer to have my tests fail while I'm still writing code than once I've published it into a PR for all to see. :)
On Wed, Aug 23, 2023 at 4:55 AM Eric Pugh <ep...@opensourceconnections.com> wrote: > Thank you for this work. > > I have found Crave to be really effective in letting me know when small > commits have odd side effects. My laptop is older, so I generally can’t > run the full test suite the way I want, and seeing the list of green checks > from Crave running the tests is always very encouraging. Looking forward > to these improvements! > > > On Aug 22, 2023, at 8:54 PM, Yuvraaj Kelkar <yuvr...@gmail.com> wrote: > > > > Sorry for the delay, I had to collect this information from the team. > > > > As you said: Crave doesn't need to know the commit history, it just > needs enough information from git to be able to reproduce the filesystem > state on to the remote side without having to do a full rsync. > > We have to account for the possibility that there's any combination of: > (common merge base whether on branch or not) + (staged commits) + (unstaged > commits) > > > > Patch process: > > Get the merge base > > Use the command git rev-list --topo-order --reverse <localBranch> --not > --remotes=<remote> -- to get a list of commit ID. > > > > If the list is empty, then the HEAD commit in the branch is the common > merge base. Use it. > > > > If the list is NOT empty, then use the first entry in the list to get > one commit ID before it. This is the merge base. > > > > With the merge base, creare a series of patches > > Staged changes: git --no-pager diff --src-prefix=a/ --dst-prefix=b/ > --binary --no-ext-diff --ignore-submodules --no-color --cached > > > > Local changes: git --no-pager format-patch --src-prefix=a/ > --dst-prefix=b/ --no-color --stdout <mergeBase> > > > > Send patches list across to the remote side, and then apply using git > apply --verbose --whitespace=nowarn <patch> > > > > In the past, we did use git am , but it is all git apply now. > > Also, we don't use format-patch because we had to implement "incremental > git patching" for users repeatedly doing incremental builds in the common > case, eg: > > User does incremental builds as changes keep getting "collected". At the > end of 3-4 days, there was 200 files modified. Patching 200 files on every > incremental caused a mtime update that causes the build system from > unnecessarily rebuilding far more than actually needed. > > A simple git diff allows us to do incremental diff patching. > > > > But besides all this explanation, we're looking to improve the entire > patching process so that there's no need to repeatedly restart Github > Actions. > > One of the ways we're trying to get debug information is to get access > to the Action Runner so that we can look at the git tree so we can get a > repro without having to guess every time. > > > > Thanks, > > -Uv > > > > On Aug 2 2023, at 10:50 am, Michael Gibney <mich...@michaelgibney.net> > wrote: > >> Hi Uv: > >> > >> regarding > https://lists.apache.org/thread/l8hgqwkm9vt8yhygoo2blw5j4n5gh121 > >> Would it be possible for Crave, instead of using `git format-patch` / > >> `git am`, to instead generate/apply a simple single diff/patch, via > >> `git diff <merge-base>..<pr_head> > file.patch` / `git apply > >> file.patch`? > >> > >> This would address a couple of problems, and should be more efficient > >> on IO as well (which is I gather the motivation for the patch-based > >> approach in the first place). > >> > >> In some cases (e.g., https://github.com/apache/solr/pull/1351), Crave > >> fails to apply patches even when the source PR branch is completely > >> up-to-date (has merged in the latest commit from `main`). The > >> workaround of rebasing is not ideal, in that it necessitates > >> force-pushes, which are considered an anti-pattern in some contexts, > >> and can generally be an inconvenience for transparency and > >> collaborative development. > >> > >> But separately relevant: Crave doesn't care about the commit history > >> -- it's only using patches to optimize IO bandwidth. So generating a > >> single diff between the merge-base and the PR head should iiuc be > >> exactly what you want, and would be guaranteed to always apply > >> cleanly. > >> > >> Would you mind sharing how you're deriving the "merge-base" commit, > >> and the command you're using (I assume, `git format-patch`?) to > >> generate the patch files? Having just merged `main` into a PR branch, > >> the merge-base of the PR branch and `main` should be: `main`. > >> > >> Thank you for your consideration! > >> Michael > >> > > > > _______________________ > Eric Pugh | Founder & CEO | OpenSource Connections, LLC | 434.466.1467 | > http://www.opensourceconnections.com < > http://www.opensourceconnections.com/> | My Free/Busy < > http://tinyurl.com/eric-cal> > Co-Author: Apache Solr Enterprise Search Server, 3rd Ed < > https://www.packtpub.com/big-data-and-business-intelligence/apache-solr-enterprise-search-server-third-edition-raw> > > This e-mail and all contents, including attachments, is considered to be > Company Confidential unless explicitly stated otherwise, regardless of > whether attachments are marked as such. > >