https://pmg.proxmox.com/wiki/index.php?title=Developer_Documentation&feed=atom&action=historyDeveloper Documentation - Revision history2024-03-29T07:25:59ZRevision history for this page on the wikiMediaWiki 1.35.11https://pmg.proxmox.com/wiki/index.php?title=Developer_Documentation&diff=97&oldid=prevStoiko Ivanov: update links to https and buster to bullseye2022-08-04T09:05:43Z<p>update links to https and buster to bullseye</p>
<table class="diff diff-contentalign-left diff-editfont-monospace" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 09:05, 4 August 2022</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l30" >Line 30:</td>
<td colspan="2" class="diff-lineno">Line 30:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Add the following to the <code>/etc/apt/sources.list</code> file:</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Add the following to the <code>/etc/apt/sources.list</code> file:</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> deb http://download.proxmox.com/debian/devel/ <del class="diffchange diffchange-inline">buster </del>main</div></td><td class='diff-marker'>+</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> deb http://download.proxmox.com/debian/devel/ <ins class="diffchange diffchange-inline">bullseye </ins>main</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Checking out a git repository ==</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Checking out a git repository ==</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l52" >Line 52:</td>
<td colspan="2" class="diff-lineno">Line 52:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The codebase is mostly Perl, with JavaScript for the web-interface.</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>The codebase is mostly Perl, with JavaScript for the web-interface.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>We use the ExtJS framework for the GUI components; its API documentation can be found [<del class="diffchange diffchange-inline">http</del>://docs.sencha.com/extjs/<del class="diffchange diffchange-inline">6</del>.0.<del class="diffchange diffchange-inline">1</del>/index.html here.]</div></td><td class='diff-marker'>+</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>We use the ExtJS framework for the GUI components; its API documentation can be found [<ins class="diffchange diffchange-inline">https</ins>://docs.sencha.com/extjs/<ins class="diffchange diffchange-inline">7</ins>.0.<ins class="diffchange diffchange-inline">0</ins>/index.html here.]</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Using git ===</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Using git ===</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l251" >Line 251:</td>
<td colspan="2" class="diff-lineno">Line 251:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Software License and Copyright ==</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Software License and Copyright ==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>We only include code licensed under GNU Affero General Public License, version 3 <del class="diffchange diffchange-inline">http</del>://www.gnu.org/licenses/agpl-3.0.html.</div></td><td class='diff-marker'>+</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>We only include code licensed under GNU Affero General Public License, version 3 <ins class="diffchange diffchange-inline">https</ins>://www.gnu.org/licenses/agpl-3.0.html.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Additionally, we ask contributors to send us a contributor license agreement form by email. This agreement establishes a relationship between us and the contributor, gives details on what it means when the contributor grants permission for their work to be included in a project, and enables us to better maintain these projects.</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Additionally, we ask contributors to send us a contributor license agreement form by email. This agreement establishes a relationship between us and the contributor, gives details on what it means when the contributor grants permission for their work to be included in a project, and enables us to better maintain these projects.</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l258" >Line 258:</td>
<td colspan="2" class="diff-lineno">Line 258:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>We've tried to keep the agreement as simple and comprehensible as possible. It comes in two flavors:</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>We've tried to keep the agreement as simple and comprehensible as possible. It comes in two flavors:</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* one for [<del class="diffchange diffchange-inline">http</del>://www.proxmox.com/downloads/item/proxmox-individual-contributor-license-agreement individual contributors]</div></td><td class='diff-marker'>+</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* one for [<ins class="diffchange diffchange-inline">https</ins>://www.proxmox.com/downloads/item/proxmox-individual-contributor-license-agreement individual contributors]</div></td></tr>
<tr><td class='diff-marker'>−</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* and one for [<del class="diffchange diffchange-inline">http</del>://www.proxmox.com/downloads/item/proxmox-entity-contributor-assignment-agreement entities contributors] (companies, foundations, or other organizations).</div></td><td class='diff-marker'>+</td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* and one for [<ins class="diffchange diffchange-inline">https</ins>://www.proxmox.com/downloads/item/proxmox-entity-contributor-assignment-agreement entities contributors] (companies, foundations, or other organizations).</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>If you are making a contribution that is not your own work (for example, a patch or library written by someone else), please contact office@proxmox.com for guidance on whether any additional steps are needed.</div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>If you are making a contribution that is not your own work (for example, a patch or library written by someone else), please contact office@proxmox.com for guidance on whether any additional steps are needed.</div></td></tr>
</table>Stoiko Ivanovhttps://pmg.proxmox.com/wiki/index.php?title=Developer_Documentation&diff=59&oldid=prevMartin: page created2020-10-29T10:28:53Z<p>page created</p>
<p><b>New page</b></p><div>== Introduction ==<br />
<br />
Please communicate you plans with us, before starting any development. It is important to have a common view of the problem and corresponding solution, in order to avoid duplicated work and unnecessary efforts.<br />
<br />
Our source code repository is read-only. To contribute code, send it as a patch (git diff) to the pmg-devel mailing list. We will review your patch and apply it (and possible corrections/additions) if the review is successful. Note that we will only include code that meets our quality criteria. <br />
<br />
== Mailing List ==<br />
<br />
This is the primary communication channel for developers to discuss new features and implementation details. If you are a developer and you want to develop additional features, this is the place to start.<br />
<br />
PMG Development List: https://lists.proxmox.com/cgi-bin/mailman/listinfo/pmg-devel<br />
<br />
Archive: https://lists.proxmox.com/pipermail/pmg-devel/<br />
<br />
== Access to Code Repository (git) ==<br />
<br />
You can find all of our project repositories at the link below.<br />
<br />
https://git.proxmox.com<br />
<br />
== Build instructions ==<br />
<br />
*TODO*<br />
<br />
== Development Package Repository ==<br />
<br />
Some packages required for development can only be found in the ''devel'' repository. <br />
This is a cross-project repository and may be used for all Proxmox projects.<br />
<br />
Add the following to the <code>/etc/apt/sources.list</code> file:<br />
<br />
deb http://download.proxmox.com/debian/devel/ buster main<br />
<br />
== Checking out a git repository ==<br />
<br />
To clone a repository, run 'git clone' with the repository name prefixed with the common URL: <nowiki>git://git.proxmox.com/git/</nowiki><br />
<br />
<source lang="bash"><br />
# git clone git://git.proxmox.com/git/proxmox-mailgateway.git<br />
</source><br />
<br />
To update an already cloned project to the current version use:<br />
<br />
<source lang="bash"><br />
# git pull<br />
</source><br />
<br />
== Working on the code ==<br />
<br />
=== Coding guidelines ===<br />
<br />
The codebase is mostly Perl, with JavaScript for the web-interface.<br />
<br />
We use the ExtJS framework for the GUI components; its API documentation can be found [http://docs.sencha.com/extjs/6.0.1/index.html here.]<br />
<br />
=== Using git ===<br />
<br />
If you are not familiar with git, it's worth having a look at this interactive tutorial:<br />
https://try.github.io, and reading the brief introduction chapter from the official git documentation: https://git-scm.com/docs/gittutorial<br />
to gain basic knowledge on it.<br />
<br />
First, configure your ''real'' name and email address for git, if not done already:<br />
<br />
<source lang="bash"><br />
$ git config --global user.name "John Doe"<br />
$ git config --global user.email john@example.com<br />
</source><br />
<br />
This will be used to sign off commits as your work.<br />
<br />
We recommend that you start a feature branch before working on the code locally:<br />
<br />
<source lang="bash"><br />
# git checkout -b my_branch master<br />
</source><br />
<br />
After this, you can start working on your improvements. You can compare your changes to the current PMG master branch with:<br />
<br />
<source lang="bash"><br />
# git diff master..my_branch<br />
</source><br />
<br />
==== Commits and Commit Messages ====<br />
<br />
After making changes, commit them (try to make small, self-contained commits) with a sign-off line included (-s).<br />
<br />
* Make sure the line length of the commit's message is '''not longer than 70 characters'''. HTTPS links are an exception and should not be split.<br />
* If it fixes a bug, start with that information, in the form: <code>fix #1234: summary here</code><br />
* If it implements a feature tracked on Bugzilla, use: <code>close #1234: summary here</code>, albeit <code>fix #1234:</code> is commonly used and also fine.<br />
* Add a tag to the beginning, if an obvious choice exists. For example, if you made a change to the user-configuration API, a possible tag could be <code>api: user-config: summary here</code><br />
: However, do '''not''' just paste the changed file, including path and file ending as a tag. This has no use and makes it harder to read.<br />
<br />
The following command will take all the changes in tracked files and commit them:<br />
<br />
<source lang="bash"><br />
# git commit -s -a<br />
</source><br />
<br />
New files won't get added automatically with this command. To stage new or altered files for a commit, use:<br />
<br />
<source lang="bash"><br />
# git add newfile1.pm file2.pm<br />
</source><br />
<br />
You can always look at what will be committed with:<br />
<br />
<source lang="bash"><br />
# git diff --staged<br />
</source><br />
<br />
== Preparing Patches ==<br />
<br />
{{note| We need a valid [[#Software License and Copyright|CLA]] to include your changes|reminder}}<br />
<br />
Since we have several projects in our git repository that use the pmg-devel mailing list,<br />
we ask you to clarify which repository your patches are meant for,<br />
by specifying it in the subject prefix, for example, 'pmg-api' or 'pmg-gui'.<br />
<br />
Example: Creating the raw patch series for the <tt>pmg-api</tt> package:<br />
<br />
<source lang="bash"><br />
# rm -rf my-patches/ # to clean left-overs<br />
# git format-patch -o my-patches/ --subject-prefix="PATCH pmg-api" master..my_branch --cover-letter<br />
</source><br />
<br />
Explain in the cover letter the aim of your patches:<br />
<br />
<source lang="bash"><br />
edit my-patches/0000-cover-letter.patch<br />
</source><br />
<br />
Sending patches:<br />
<br />
<source lang="bash"><br />
# git send-email --to=pmg-devel@lists.proxmox.com my-patches/00*.patch<br />
# rm -rf my-patches/ # to clean left-overs<br />
</source><br />
<br />
If you wish to write comments for individual patches, you can do that either in<br />
the cover-letter, or in the patch's ''commit summary section'' (between the line<br />
consisting of 3 consecutive dashes ending your commit message and before the<br />
list of files with their change-counts).<br />
<br />
Example:<br />
<br />
<pre><br />
From 12345abcde Mon Sep 12 00:00:00 2001<br />
From: Git Committer <some email address><br />
Date: Fri, 7 Oct 2020 08:30:17 +0200<br />
Subject: [PATCH pmg-api 1/2] Fix #1013: this and that<br />
<br />
Here is your commit message.<br />
It explains the bugfix and ends after this line.<br />
<br />
Signed-off-by: Firstname Lastname <firstname@lastname.email><br />
---<br />
***HERE*** you can write your comments.<br />
If this is a new version of an old patch, explain your changes here<br />
<br />
src/PMG/Config.pm | 2 +-<br />
<br />
diff --git a/src/PMG/Config.pm b/src/PMG/Config.pm<br />
(...)<br />
</pre><br />
<br />
If you want to send several related patches that contain changes to different repositories, you can first iterate over all involved repositories, save the patches into one directory and then do a single git send-email over all generated patches. For example, lets go to a few repos and format the most recent commit as a patch to /tmp/patchq, then send it:<br />
<br />
<source lang="bash"><br />
# cd pmg-api; git format-patch -s -o /tmp/patchq -1 <br />
# cd ../pmg-gui; git format-patch -s -o /tmp/patchq -1 <br />
# git send-email --compose --to=pmg-devel@lists.proxmox.com /tmp/patchq/*<br />
</source><br />
<br />
Using "start-number" and the likes can improve this further, but this is a good start.<br />
<br />
=== Versioned Patches ===<br />
<br />
If an updated version of your patch series is called for, it should be sent<br />
as a new series, rather than as a reply to the old series.<br />
Always send the entire series, with all patches showing the same version.<br />
Please mark your versions in the subject prefix, with a small 'v', followed by<br />
the version number, like this:<br />
<br />
<source lang="bash"><br />
# git format-patch -o my-patches/ --subject-prefix="PATCH v2 pmg-api" master..my_branch<br />
</source><br />
<br />
Please list all the changes to the previous versions in the ''commit summary<br />
section'' as shown in the above example.<br />
For patches with no changes to the previous version, you should mention that there were no<br />
changes in the summary section.<br />
<br />
If your series has a cover letter, summarize all changes in it as well.<br />
<br />
=== Reviewing patches ===<br />
<br />
After reviewing patches which affect a subsystem you maintain, you can notify<br />
committers that you have reviewed the patch and are OK with the changes, with: <br />
<br />
<pre><br />
Acked-by: name / email address<br />
</pre><br />
<br />
=== Convenience Settings ===<br />
<br />
For convenience, you can store the pmg-devel email address and the repository's<br />
default subject prefixes in your repository clones' configurations as follows:<br />
<br />
<source lang="bash"><br />
$ git config --local sendemail.to pmg-devel@lists.proxmox.com<br />
$ git config --local format.subjectprefix 'PATCH pmg-gui'<br />
$ git config --local format.signoff true <br />
</source><br />
<br />
Now the commands to create and send patches become:<br />
<br />
<source lang="bash"><br />
# git format-patch -o my-patches/ master..my_branch<br />
# git send-email --compose my-patches/00*.patch<br />
</source><br />
<br />
== Sending Patches ==<br />
<br />
Always use <code>git send-email</code> to send out patches, otherwise the indentation and formatting will get mangled and the patch cannot be applied anymore.<br />
<br />
=== Tutorial ===<br />
<br />
See https://git-send-email.io/ for an interactive tutorial on setting up <code>git send-email</code>.<br />
<br />
=== Using Authenticated SMTP Server ===<br />
<br />
<code>git send-email</code> can be instructed to use a specific SMTP server for sending. The following shows an anonymized config section example:<br />
<br />
[sendemail]<br />
smtpencryption = tls<br />
smtpserver = webmail.example.com<br />
smtpserverport = 587<br />
smtpuser = j.smith@example.com<br />
smtpsslcertpath =<br />
confirm = always<br />
<br />
Add this to your global user <code>~/.gitconfig</code> or to the per project <code>.git/config</code>.<br />
<code>git send-email</code> will then use these settings by default and ask you once for the password when sending.<br />
<br />
== Bugtracker (Bugzilla) ==<br />
<br />
We use Bugzilla to track bugs and feature requests for our products.<br />
<br />
https://bugzilla.proxmox.com<br />
<br />
== Software License and Copyright ==<br />
<br />
We only include code licensed under GNU Affero General Public License, version 3 http://www.gnu.org/licenses/agpl-3.0.html.<br />
<br />
Additionally, we ask contributors to send us a contributor license agreement form by email. This agreement establishes a relationship between us and the contributor, gives details on what it means when the contributor grants permission for their work to be included in a project, and enables us to better maintain these projects.<br />
<br />
With the contributor agreement chosen by Proxmox, the [http://www.harmonyagreements.org Harmony CLA], the contributor gives Proxmox a license to use their contributions. The contributor continues to own the copyright in the contribution, with full rights to re-use, re-distribute, and continue modifying the contributed code, allowing them to also share that contribution with other projects.<br />
<br />
We've tried to keep the agreement as simple and comprehensible as possible. It comes in two flavors:<br />
* one for [http://www.proxmox.com/downloads/item/proxmox-individual-contributor-license-agreement individual contributors]<br />
* and one for [http://www.proxmox.com/downloads/item/proxmox-entity-contributor-assignment-agreement entities contributors] (companies, foundations, or other organizations).<br />
<br />
If you are making a contribution that is not your own work (for example, a patch or library written by someone else), please contact office@proxmox.com for guidance on whether any additional steps are needed.<br />
<br />
== See Also ==<br />
<br />
* [https://git-scm.com/documentation Git Documentation]</div>Martin