<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.softwareheritage.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tenma</id>
	<title>Software Heritage Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.softwareheritage.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tenma"/>
	<link rel="alternate" type="text/html" href="https://wiki.softwareheritage.org/wiki/Special:Contributions/Tenma"/>
	<updated>2026-04-20T10:59:03Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://wiki.softwareheritage.org/index.php?title=Testing_the_archive_features&amp;diff=1438</id>
		<title>Testing the archive features</title>
		<link rel="alternate" type="text/html" href="https://wiki.softwareheritage.org/index.php?title=Testing_the_archive_features&amp;diff=1438"/>
		<updated>2021-02-01T18:26:49Z</updated>

		<summary type="html">&lt;p&gt;Tenma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Sample repositories ==&lt;br /&gt;
&lt;br /&gt;
Unless otherwise stated, Git repositories.&lt;br /&gt;
Please add approximate stats along with a date to help choosing the right repo for the task.&lt;br /&gt;
&lt;br /&gt;
=== Big ===&lt;br /&gt;
&lt;br /&gt;
Linux: [approx stats (approx date)] https://github.com/torvalds/linux&lt;br /&gt;
&lt;br /&gt;
CPython: https://github.com/python/cpython&lt;br /&gt;
&lt;br /&gt;
=== Intermediate ===&lt;br /&gt;
&lt;br /&gt;
Forge containing small/medium repositories: https://0xacab.org/explore&lt;br /&gt;
&lt;br /&gt;
=== Smallest ===&lt;br /&gt;
&lt;br /&gt;
(please insert some hello world repo)&lt;br /&gt;
&lt;br /&gt;
https://github.com/ardumont/home-manager&lt;br /&gt;
&lt;br /&gt;
=== Edge cases ===&lt;br /&gt;
&lt;br /&gt;
No branches:&lt;br /&gt;
https://github.com/ilbelkyr/branchless&lt;br /&gt;
&lt;br /&gt;
Million commits:&lt;br /&gt;
https://github.com/cirosantilli/test-many-commits-1m&lt;br /&gt;
&lt;br /&gt;
100k octopus merge:&lt;br /&gt;
https://github.com/cirosantilli/test-octopus-100k&lt;br /&gt;
&lt;br /&gt;
Arbitrary content (beware digital hazard):&lt;br /&gt;
https://github.com/illacceptanything/illacceptanything&lt;br /&gt;
&lt;br /&gt;
[[Category:Software development]]&lt;/div&gt;</summary>
		<author><name>Tenma</name></author>
	</entry>
	<entry>
		<id>https://wiki.softwareheritage.org/index.php?title=Testing_the_archive_features&amp;diff=1346</id>
		<title>Testing the archive features</title>
		<link rel="alternate" type="text/html" href="https://wiki.softwareheritage.org/index.php?title=Testing_the_archive_features&amp;diff=1346"/>
		<updated>2020-10-19T14:23:27Z</updated>

		<summary type="html">&lt;p&gt;Tenma: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Sample repositories ==&lt;br /&gt;
&lt;br /&gt;
Unless otherwise stated, Git repositories.&lt;br /&gt;
Please add approximate stats along with a date to help choosing the right repo for the task.&lt;br /&gt;
&lt;br /&gt;
=== Big ===&lt;br /&gt;
&lt;br /&gt;
Linux: [approx stats (approx date)] https://github.com/torvalds/linux&lt;br /&gt;
&lt;br /&gt;
CPython: https://github.com/python/cpython&lt;br /&gt;
&lt;br /&gt;
=== Intermediate ===&lt;br /&gt;
&lt;br /&gt;
Forge containing small repositories: https://0xacab.org/explore&lt;br /&gt;
&lt;br /&gt;
=== Smallest ===&lt;br /&gt;
&lt;br /&gt;
(please insert some hello world repo)&lt;br /&gt;
&lt;br /&gt;
=== Edge cases ===&lt;br /&gt;
&lt;br /&gt;
No branches:&lt;br /&gt;
https://github.com/ilbelkyr/branchless&lt;br /&gt;
&lt;br /&gt;
Million commits:&lt;br /&gt;
https://github.com/cirosantilli/test-many-commits-1m&lt;br /&gt;
&lt;br /&gt;
100k octopus merge:&lt;br /&gt;
https://github.com/cirosantilli/test-octopus-100k&lt;br /&gt;
&lt;br /&gt;
Arbitrary content (beware digital hazard):&lt;br /&gt;
https://github.com/illacceptanything/illacceptanything&lt;br /&gt;
&lt;br /&gt;
[[Category:Software development]]&lt;/div&gt;</summary>
		<author><name>Tenma</name></author>
	</entry>
	<entry>
		<id>https://wiki.softwareheritage.org/index.php?title=Testing_the_archive_features&amp;diff=1345</id>
		<title>Testing the archive features</title>
		<link rel="alternate" type="text/html" href="https://wiki.softwareheritage.org/index.php?title=Testing_the_archive_features&amp;diff=1345"/>
		<updated>2020-10-19T14:12:51Z</updated>

		<summary type="html">&lt;p&gt;Tenma: -&amp;gt; Sample repositories&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Sample repositories ==&lt;br /&gt;
&lt;br /&gt;
Unless otherwise stated, Git repositories.&lt;br /&gt;
Please add approximate stats along with a date to help choosing the right repo for the task.&lt;br /&gt;
&lt;br /&gt;
=== Big ===&lt;br /&gt;
&lt;br /&gt;
Linux: [approx stats (approx date)] https://github.com/torvalds/linux&lt;br /&gt;
&lt;br /&gt;
CPython: https://github.com/python/cpython&lt;br /&gt;
&lt;br /&gt;
=== Intermediate ===&lt;br /&gt;
&lt;br /&gt;
Forge containing small repositories: https://0xacab.org/explore&lt;br /&gt;
&lt;br /&gt;
=== Smallest ===&lt;br /&gt;
&lt;br /&gt;
(please insert some hello world repo)&lt;br /&gt;
&lt;br /&gt;
=== Edge cases ===&lt;br /&gt;
&lt;br /&gt;
No branches:&lt;br /&gt;
https://github.com/ilbelkyr/branchless&lt;br /&gt;
&lt;br /&gt;
Million commits:&lt;br /&gt;
https://github.com/cirosantilli/test-many-commits-1m&lt;br /&gt;
&lt;br /&gt;
100k octopus merge:&lt;br /&gt;
https://github.com/cirosantilli/test-octopus-100k&lt;br /&gt;
&lt;br /&gt;
Arbitrary content (beware digital hazard):&lt;br /&gt;
https://github.com/illacceptanything/illacceptanything&lt;/div&gt;</summary>
		<author><name>Tenma</name></author>
	</entry>
	<entry>
		<id>https://wiki.softwareheritage.org/index.php?title=Testing_the_archive_features&amp;diff=1344</id>
		<title>Testing the archive features</title>
		<link rel="alternate" type="text/html" href="https://wiki.softwareheritage.org/index.php?title=Testing_the_archive_features&amp;diff=1344"/>
		<updated>2020-10-19T14:11:50Z</updated>

		<summary type="html">&lt;p&gt;Tenma: Included initial repos for specific use cases&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Repositories ==&lt;br /&gt;
&lt;br /&gt;
Unless otherwise stated, Git repositories.&lt;br /&gt;
Please add approximate stats along with a date to help choosing the right repo for the task.&lt;br /&gt;
&lt;br /&gt;
=== Big ===&lt;br /&gt;
&lt;br /&gt;
Linux: [approx stats (approx date)] https://github.com/torvalds/linux&lt;br /&gt;
&lt;br /&gt;
CPython: https://github.com/python/cpython&lt;br /&gt;
&lt;br /&gt;
=== Intermediate ===&lt;br /&gt;
&lt;br /&gt;
Forge containing small repositories: https://0xacab.org/explore&lt;br /&gt;
&lt;br /&gt;
=== Smallest ===&lt;br /&gt;
&lt;br /&gt;
(please insert some hello world repo)&lt;br /&gt;
&lt;br /&gt;
=== Edge cases ===&lt;br /&gt;
&lt;br /&gt;
No branches:&lt;br /&gt;
https://github.com/ilbelkyr/branchless&lt;br /&gt;
&lt;br /&gt;
Million commits:&lt;br /&gt;
https://github.com/cirosantilli/test-many-commits-1m&lt;br /&gt;
&lt;br /&gt;
100k octopus merge:&lt;br /&gt;
https://github.com/cirosantilli/test-octopus-100k&lt;br /&gt;
&lt;br /&gt;
Arbitrary content (beware digital hazard):&lt;br /&gt;
https://github.com/illacceptanything/illacceptanything&lt;/div&gt;</summary>
		<author><name>Tenma</name></author>
	</entry>
	<entry>
		<id>https://wiki.softwareheritage.org/index.php?title=Code_review_in_Phabricator&amp;diff=1334</id>
		<title>Code review in Phabricator</title>
		<link rel="alternate" type="text/html" href="https://wiki.softwareheritage.org/index.php?title=Code_review_in_Phabricator&amp;diff=1334"/>
		<updated>2020-09-14T14:15:21Z</updated>

		<summary type="html">&lt;p&gt;Tenma: Added step about rebasing concurrent commits on master&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We use the [[Differential]] application of [[Phabricator]] to perform [[code review|code reviews]] in the context of [[Software Heritage]].&lt;br /&gt;
&lt;br /&gt;
* we use Git and history.immutable=true (but beware as that is partly a Phabricator misnomer, read on)&lt;br /&gt;
* when code reviews are required, developers will be allowed to push directly to master once an accepted Differential diff exists&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Arcanist configuration ===&lt;br /&gt;
&lt;br /&gt;
When using git, [[Arcanist]] by default mess with the local history, rewriting commits at the time of first submission.&amp;lt;br /&amp;gt;&lt;br /&gt;
To avoid that we use so called [https://secure.phabricator.com/book/phabricator/article/arcanist_new_project/#history-mutability-git history immutability].&lt;br /&gt;
&lt;br /&gt;
To that end, you shall configure your &amp;lt;tt&amp;gt;arc&amp;lt;/tt&amp;gt; accordingly:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
arc set-config history.immutable true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that this does ''not'' mean that you are forbidden to rewrite your local branches (e.g., with &amp;lt;tt&amp;gt;git rebase&amp;lt;/tt&amp;gt;).&lt;br /&gt;
Quite the contrary: you are encouraged to locally rewrite branches before pushing to ensure that commits are logically separated and your commit history easy to bisect.&lt;br /&gt;
The above setting just means that ''arc'' will not rewrite commit history under your nose.&lt;br /&gt;
&lt;br /&gt;
=== Enabling &amp;lt;tt&amp;gt;git push&amp;lt;/tt&amp;gt; to our forge ===&lt;br /&gt;
&lt;br /&gt;
The way we've configured our review setup for continuous integration needs you to configure git to allow pushes to our forge. There's two ways you can do this : setting a ssh key to push over ssh, or setting a specific password for git pushes over https.&lt;br /&gt;
&lt;br /&gt;
==== SSH key for pushes ====&lt;br /&gt;
&lt;br /&gt;
In your forge User settings page (On the top right, click on your avatar, then click ''Settings''), you have access to a ''Authentication'' &amp;gt; ''SSH Public Keys'' section (Direct link: &amp;lt;tt&amp;gt;hxxps://forge.softwareheritage.org/settings/user/'''&amp;lt;your username&amp;gt;'''/page/ssh/&amp;lt;/tt&amp;gt;). You then have the option to upload a SSH public key, which will authenticate your pushes.&lt;br /&gt;
&lt;br /&gt;
You then need to configure ssh/git to use that key pair, for instance by editing the &amp;lt;tt&amp;gt;~/.ssh/config&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
Finally, you should configure git to push over ssh when pushing to https://forge.softwareheritage.org, by running the following command:&lt;br /&gt;
 git config --global url.git@forge.softwareheritage.org:.pushInsteadOf https://forge.softwareheritage.org&lt;br /&gt;
&lt;br /&gt;
This lets git know that it should use &amp;lt;tt&amp;gt;git@forge.softwareheritage.org:&amp;lt;/tt&amp;gt; as a base url when pushing repositories cloned from forge.softwareheritage.org over https.&lt;br /&gt;
&lt;br /&gt;
==== VCS password for pushes ====&lt;br /&gt;
&lt;br /&gt;
If you're not comfortable setting up SSH to upload your changes, you have the option of setting a VCS password. This password, ''separate from your account password'', allows Phabricator to authenticate your uploads over HTTPS.&lt;br /&gt;
&lt;br /&gt;
In your forge User settings page (On the top right, click on your avatar, then click ''Settings''), you need to use the ''Authentication'' &amp;gt; ''VCS Password'' section to set your VCS password (Direct link: &amp;lt;tt&amp;gt;hxxps://forge.softwareheritage.org/settings/user/'''&amp;lt;your username&amp;gt;'''/page/vcspassword/&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
If you still get a 403 error on push, this means you need a forge administrator to enable HTTPS pushes for the repository (which wasn't done by default in historical repositories). Please drop by on IRC and let us know!&lt;br /&gt;
&lt;br /&gt;
== Workflow ==&lt;br /&gt;
&lt;br /&gt;
* work in a feature branch: &amp;lt;tt&amp;gt;git checkout -b my-feat&amp;lt;/tt&amp;gt;&lt;br /&gt;
* initial review request: hack/commit/hack/commit ; &amp;lt;tt&amp;gt;arc diff origin/master&amp;lt;/tt&amp;gt;&lt;br /&gt;
* react to change requests: hack/commit/hack/commit ; &amp;lt;tt&amp;gt;arc diff --update Dxx origin/master&amp;lt;/tt&amp;gt;&lt;br /&gt;
* landing change: &amp;lt;tt&amp;gt;git checkout master ; git merge my-feat ; git push&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting a new feature and submit it for review ===&lt;br /&gt;
&lt;br /&gt;
Use a '''one branch per feature''' workflow, with well-separated ''logical commits'' ([https://wiki.softwareheritage.org/wiki/Git_style_guide following those conventions]).&lt;br /&gt;
Please open one diff per logical commit to keep the diff size to a minimum.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git checkout -b my-shiny-feature&lt;br /&gt;
... hack hack hack ...&lt;br /&gt;
git commit -m 'architecture skeleton for my-shiny-feature'&lt;br /&gt;
... hack hack hack ...&lt;br /&gt;
git commit -m 'my-shiny-feature: implement module foo'&lt;br /&gt;
... etc ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please, follow the &lt;br /&gt;
To '''submit your code for review''' the first time:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
arc diff origin/master&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
arc will prompt for a '''code review message'''. Provide the following information:&lt;br /&gt;
* first line: ''short description'' of the overall work (i.e., the feature you're working on). This will become the title of the review&lt;br /&gt;
* ''Summary'' field (optional): ''long description'' of the overall work; the field can continue in subsequent lines, up to the next field. This will become the &amp;quot;Summary&amp;quot; section of the review&lt;br /&gt;
* ''Test Plan'' field (optional): write here if something special is needed to test your change&lt;br /&gt;
* ''Reviewers'' field (optional): the (Phabricator) name(s) of desired reviewers. If you don't specify one (recommended) the default reviewers will be chosen&lt;br /&gt;
* ''Subscribers'' field (optional): the (Phabricator) name(s) of people that will be notified about changes to this review request. In most cases it should be left empty&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mercurial loader&lt;br /&gt;
&lt;br /&gt;
Summary: first stab at a mercurial loader (T329)&lt;br /&gt;
&lt;br /&gt;
The implementation follows the plan detailed in F2F discussion with @foo.&lt;br /&gt;
&lt;br /&gt;
Performances seem decent enough for a first trial (XXX seconds for YYY repository&lt;br /&gt;
that contains ZZZ patches).&lt;br /&gt;
&lt;br /&gt;
Test plan: &lt;br /&gt;
&lt;br /&gt;
Reviewers: &lt;br /&gt;
&lt;br /&gt;
Subscribers: foo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After completing the message arc will submit the review request and tell you its number and URL:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[...]&lt;br /&gt;
Created a new Differential revision:&lt;br /&gt;
        Revision URI: https://forge.softwareheritage.org/Dxx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Updating your branch to reflect requested changes ===&lt;br /&gt;
&lt;br /&gt;
Your feature might get accepted as is, YAY!&lt;br /&gt;
Or, reviewers might request changes; no big deal!&lt;br /&gt;
&lt;br /&gt;
Use the Differential web UI to follow-up to received comments, if needed.&lt;br /&gt;
&lt;br /&gt;
To implement requested changes in the code, hack on your branch as usual by:&lt;br /&gt;
&lt;br /&gt;
* adding new commits, and/or&lt;br /&gt;
* rewriting old commits with git rebase (to preserve a nice, easy to bisect history)&lt;br /&gt;
* pulling on master and rebasing your branch against it if meanwhile someone landed commits on master:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git checkout master&lt;br /&gt;
git pull&lt;br /&gt;
git checkout my-shiny-feature&lt;br /&gt;
git rebase master&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When you're ready to '''update your review request''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
arc diff --update Dxx HEAD~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arc will prompt you for a message: describe what you've changed w.r.t. the previous review request, free form.&lt;br /&gt;
Your message will become the changelog entry in Differential for this new version of the diff.&lt;br /&gt;
&lt;br /&gt;
Differential only care about the code diff, and not about the commits or their order.&lt;br /&gt;
Therefore each &amp;quot;update&amp;quot; can be a completely different series of commits, possibly rewritten from the previous submission.&lt;br /&gt;
&lt;br /&gt;
=== Dependencies between diffs ===&lt;br /&gt;
&lt;br /&gt;
Note that you can manage diff dependencies within the same module with the following keyword in the diff description:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Depends on Dxx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That allows to keep a logical view in your diff.&lt;br /&gt;
It's not strictly necessary (because the tooling now deals with it properly) but it might help reviewers or yourself to do so.&lt;br /&gt;
&lt;br /&gt;
=== Landing your change onto master ===&lt;br /&gt;
&lt;br /&gt;
Once your change has been approved in Differential, you will be able to land it onto the master branch.&lt;br /&gt;
&lt;br /&gt;
Before doing so, you're encouraged to '''clean up your git commit history''', reordering/splitting/merging commits as needed to have separate logical commits and an easy to bisect history.&lt;br /&gt;
Update the diff [https://wiki.softwareheritage.org/wiki/Code_review_in_Phabricator#Updating_your_branch_to_reflect_requested_changes following the prior section].&lt;br /&gt;
(It'd be good to let the ci build finish to make sure everything is still green).&lt;br /&gt;
&lt;br /&gt;
Once you're happy you can '''push to origin/master''' directly, e.g.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git checkout master&lt;br /&gt;
git merge --ff-only my-shiny-feature&lt;br /&gt;
git push&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;--ff-only&amp;lt;/code&amp;gt; is optional, and makes sure you don't unintentionally create a merge commit.&lt;br /&gt;
&lt;br /&gt;
Optionally you can then delete your local feature branch:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git branch -d my-shiny-feature&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Reviewing locally / landing someone else's changes ===&lt;br /&gt;
&lt;br /&gt;
You can do local reviews of code with arc patch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
arc patch Dxyz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will create a branch '''arcpatch-Dxyz''' containing the changes on your local checkout.&lt;br /&gt;
&lt;br /&gt;
You can then merge those changes upstream with&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git checkout master&lt;br /&gt;
git merge --ff arcpatch-Dxyz&lt;br /&gt;
git push origin master&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or, alternatively:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
arc land --squash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Code review]] for guidelines on how code is reviewed when developing for Software Heritage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Software development]]&lt;/div&gt;</summary>
		<author><name>Tenma</name></author>
	</entry>
</feed>