nrwl/nx-set-shas

Commit not found if more than 100 commits on a branch

Opened this issue · 2 comments

When a large number of commits have been made to a branch (eg more 200) it fails to verify that the commitExists on the branch.

I believe that this code is not finding the commit due the number of commits being limited to 100

            // Check the commit exists on the expected main branch (it will not in the case of a rebased main branch)
            const commits = yield octokit.request("GET /repos/{owner}/{repo}/commits", {
                owner,
                repo,
                sha: branchName,
                per_page: 100,
            });
            return commits.data.some((commit) => commit.sha === commitSha);

Obviously going back to the start of the repo could be expensive, so perhaps a customisable limit of commits/pages could be allowed. In my instance I am currently looking at a pull req with 940+ commits for an upcoming release.

I have come up with a solution that should work for us, it is hard coded to a 20 page (2K commit limit)

           // Check the commit exists on the expected main branch (it will not in the case of a rebased main branch)
            let maxPages = 20;
            let commitFound = false;
            yield octokit.paginate("GET /repos/{owner}/{repo}/commits", {
                owner,
                repo,
                sha: branchName,
                per_page: 100,
            }, (response, done) => {
                if (response.data.some((commit) => commit.sha === commitSha)) {
                    commitFound = true;
                    done();
                }
                // End after maxPages reached
                if (maxPages <= 0) {
                    done();
                }
                maxPages--;
                return response;
            });
            return commitFound;

Hi there @TonyWhiteSMS ! Thank you for the feature request and the suggested implementation! Do you want to submit a PR, and I can review it? Thank you for your patience!