From fcb148a83956b43a151ae0764994f7a5ce4eeaa2 Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Fri, 4 Jan 2019 12:58:00 +0100 Subject: [PATCH 1/2] Convert to Unix line endings Signed-off-by: Johannes Schindelin --- .gitattributes | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..3bc455ce --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +.gitattributes eol=lf +*.html eol=lf From b0c692f9f83bbc6c8ccec528a1235613cc51a64a Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Fri, 4 Jan 2019 14:37:30 +0100 Subject: [PATCH 2/2] Overhaul the entire page Better explanation, some CSS experiments, fun all around. Signed-off-by: Johannes Schindelin --- .gitattributes | 2 + images/gitgitgadget-explanation.png | Bin 0 -> 32119 bytes images/gitgitgadget-explanation.svg | 264 ++++++++++++++++++++++++++++ index.html | 94 ++++++++-- 4 files changed, 346 insertions(+), 14 deletions(-) create mode 100644 images/gitgitgadget-explanation.png create mode 100644 images/gitgitgadget-explanation.svg diff --git a/.gitattributes b/.gitattributes index 3bc455ce..125f9821 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,4 @@ .gitattributes eol=lf *.html eol=lf +*.svg eol=lf +*.png binary diff --git a/images/gitgitgadget-explanation.png b/images/gitgitgadget-explanation.png new file mode 100644 index 0000000000000000000000000000000000000000..9ec254b79cf974e42bf79b4fbd188c9bd0f88bba GIT binary patch literal 32119 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 I4^4yqADeD+IsgCw literal 0 HcmV?d00001 diff --git a/images/gitgitgadget-explanation.svg b/images/gitgitgadget-explanation.svg new file mode 100644 index 00000000..cec42b0f --- /dev/null +++ b/images/gitgitgadget-explanation.svg @@ -0,0 +1,264 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/index.html b/index.html index 6061d109..295487e7 100644 --- a/index.html +++ b/index.html @@ -1,23 +1,89 @@ - GitGitGadget - send GitHub PRs to the Git mailing list + GitGitGadget - contributing git.git patches via GitHub PRs + -

GitGitGadget - send GitHub PRs to the Git mailing list

+
-

- This project intends to help submit patch series to the Git mailing list. The process is not quite as painless for the contributor as opening Pull Requests, but at least it is much less painful than having to perform all the steps manually (see e.g. Git for Windows' detailed instructions how to contribute patches to the Git project). -

+
+

+ Unlike most open source projects, Git itself does not accept code contributions via Pull Requests. + Instead, patches are submitted to the Git mailing list for review and will be applied manually by the Git maintainer. +

+ Apart from lacking the convenience of a web interface, this process also puts considerable demands on the code contributions: the mails are expected to be plain text only (no HTML!), for example, and the diffs embedded in the mails must apply cleanly (no whitespace changes!), among other things. +

+ A few tutorials out there try to help with this process (e.g. Git for Windows' detailed instructions how to contribute patches to the Git project). + GitGitGadget tries a different approach: allow contributing patches to the Git project itself by opening a Pull Request at https://github.com/gitgitgadget/git and let GitGitGadget prepare and send the corresponding mails. +

+
+ +

How can you use GitGitGadget?

+
+

+ So you cloned https://github.com/git/git and implemented a bug fix or a new feature? + And you already pushed it to your own fork? + Good, now is the time to direct your web browser to https://github.com/gitgitgadget/git and to open a Pull Request. + Please make sure to use a descriptive Pull Request title and description; GitGitGadget will use these as the cover letter. + You will also want to read Git's guidelines to make sure that your contributions are in the expected form. +

+ The first time you use GitGitGadget, you need to be added to the list of users with permission to use GitGitGadget (this is a very simple anti-spam measure). + Any user who is already on that list can do that, by adding a comment to that Pull Request that says /allow <username> (with your GitHub login name). +

+ The Pull Request will trigger a few Checks, most importantly one that will build Git and run the test suite on the main platforms, to make sure that everything works as advertised. +

+ Once everything is ready to go, add a comment to that Pull Request saying /submit. + This will trigger GitGitGadget (you can see the progress via the Check called "GitGitGadget PR Handler"): it will wrap your Pull Request into a nice bundle of mails in the format expected on the Git mailing list. +

+
-

- GitGitGadget's idea is for users to open a Pull Request at https://github.com/gitgitgadget/git with a good description of their patch series. Then, the command /submit, issued via a comment on said PR will tell GitGitGadget to send the patches as mail thread to the Git mailing list, with the Pull Request's description as cover letter. +

What happens after GitGitGadget sent the mails?

+
+

+ The patches will be reviewed by volunteers (be gentle...) and you will most likely receive helpful comments. + The Git developer community is globally distributed, so please wait a day or two for reviewer comments to trickle in before sending another iteration of your patch series (if needed). +

+ In the case that a reviewer asks for changes, you should respond either acknowledging that you will make those changes or making an argument against the requested changes. + If your patches need to be revised, please use git rebase -i to do that, then force-push, then update the description of the Pull Request by adding a summary of the changes you made, and then issue another /submit. +

+
-

- In the case that a reviewer asked for changes, subsequent iterations of the patch series can be sent by force-pushing, possibly updating the description of the Pull Request (including changes relative to the previous iteration), and issuing another /submit. -

- -

- GitGitGadget itself is a web application written in Typescript (which is really easy to understand/write for everybody who knows even a little Javascript), maintained at https://github.com/gitgitgadget/gitgitgadget. -

+

But... what is GitGitGadget?

+
+

+ GitGitGadget itself is a GitHub App that is backed by an Azure Function written in pure Javascript which in turn triggers an Azure Pipeline written in Typescript (which is really easy to understand and write for everybody who knows even just a little Javascript), maintained at https://github.com/gitgitgadget/gitgitgadget. +

+