Where to get current version of Inferno

178 views
Skip to first unread message

clasp126...@icebubble.org

unread,
Feb 15, 2022, 5:04:50 PM2/15/22
to inferno-os
So, I'm working on a sizeable contribution to Inferno (several libraries
and applications supplying functionality that's currently missing). In
order to make sure my patches apply cleanly to the current source, I
tried to pull in the most recent updates, but "hg pull" greeted me with
a friendly 404: not found. So, I pointed a Web browser at
https://bitbucket.org/inferno-os/inferno-os/ and got a blank (completely
blank) page. No 404, no error message, no headers or footers - just a
blank white page. Peeling-off the final "/inferno-os" and trying the
page for the account (https://bitbucket.org/inferno-os/) I got the same
thing: just a blank page. Backing out, one level further,
https://bitbucket.org/ had a bunch of garbage advertising a bunch stuff
that nobody really cares enough to pay attention to. So, where did the
official repo go? The docs at vitanuova.com say the latest code can be
found at https://bitbucket.org/inferno-os/inferno-os/.

Does anyone know of any mirrors of the official repo where I might be
able to grab the latest changes?

Thanks!

da...@boddie.org.uk

unread,
Feb 15, 2022, 7:00:45 PM2/15/22
to inferno-os
On Tuesday 15 February 2022, clasp126 wrote:
Does anyone know of any mirrors of the official repo where I might be
able to grab the latest changes?

Yes, it's still at https://bitbucket.org/inferno-os/inferno-os but it's now a git repository.
Bitbucket deleted all the Mercurial repositories.

So, either of these should work:

    git clone g...@bitbucket.org:inferno-os/inferno-os.git

Good luck!

clasp126...@icebubble.org

unread,
Feb 16, 2022, 4:57:50 PM2/16/22
to inferno-os
"da...@boddie.org.uk" <da...@boddie.org.uk> writes:

> On Tuesday 15 February 2022, clasp126 wrote:
>
>> Does anyone know of any mirrors of the official repo where I might be
>> able to grab the latest changes?
>>
>
> Yes, it's still at https://bitbucket.org/inferno-os/inferno-os but it's now
> a git repository.
> Bitbucket deleted all the Mercurial repositories.

What? You mean to tell me I have to learn a new DVCS? What am I
supposed to do with all the code I've developed under Mercurial? Has
the "official" source for the OS migrated to git, or is this just a git
"mirror" of the current Mercurial repo?

The Internet has a real problem with persistency, these days. There are
very few URIs that are more than 5 years old that are still valid,
today. People move from vendor to vendor, platform to platform, domain
to domain, and technology to technology without any concern for
maintaining the accessibility or integrity of historical data. I
recently tried downloading a deep link to a data sheet for a
semiconductor sold by Atmel, and was unceremoniously redirected to the
homepage for microchip.com (which, apparently, since acquired Atmel).
No attempt - at all - was made to map the old URL for the resource to
its new URL. Nobody seems to care about consistency, anymore. The
Internet basically becomes incompatible with itself - breaks itself -
about every 5 years or so. I shouldn't have to buy a whole new set of
nuclear-powered quantum flux modulators every 5 years, just to use
something that has worked perfectly fine for 5, 10, or 15 years. A
hammer is a hammer, and a nail is a nail - and the hammer and nail have
remained essentially unchanged, for more than 100 years, because they're
simple and because they work. Yes, there are now pneumatic nail guns,
which are fed nails in strips, but you can still buy real hammers, and
still buy loose nails, and they still work just as well EVEN ON
modern-day 2x4"s.

I (along with thousands of other people) chose Mercurial for my code
because it seemed to be the best of the "big three" DVCS options
avialable at the time: Bazaar, Mercurial, and Git. Bazaar's interface
seemed to be a bit more polished than Mercurial's, but it wasn't as
widely-supported. Git, on the other hand, was an absolute mess:
overly-complicated and impossible to understand, with a non-intuitive
set of commands, and a ridiculous number of dependencies. By contrast,
Mercurial was easy to understand, its command set was sensible, it was
widely-supported, and it had only one dependency: Python. The fact that
Git is more popular (due to its use for maintaining the Linux kernel)
doesn't MEAN that it's any better. It doesn't really matter if Ryobi
thinks its nail gun is "better" than a traditional hammer. That doesn't
empower them (or anybody else) to declare hammers "obsolete." Yet this
is how the Internet has been operating over the past 15-20 years. Is it
really too much to ask for the Internet to adopt some degree of
stability, persistence, simpilicity, or reliability? Engineers used to
care about these things. </rant>

So, how am I supposed to contribute the changes I've committed to my
(local) Mercurial repo to the main tree, if it's now using Git? And how
am I supposed to maintain the private branches that I have in Mercurial
(which I don't plan to push to the mainline tree) now that the main
tree is in Git? Your newfangled hammer doesn't fit my nails.

> So, either of these should work:
>
> git clone g...@bitbucket.org:inferno-os/inferno-os.git
> git clone https://bitbucket.org/inferno-os/inferno-os.git

Someone should probably post a note on that page, describing what
happened to the official repository, and give the git address of the new
repo. Just having a blank page (and a missing hg repository, without
any explanation) just creates head-scratching and confusion.

Anthony Sorace

unread,
Feb 16, 2022, 5:22:41 PM2/16/22
to inferno-os
> Someone should probably post a note on that page, describing what
> happened to the official repository, and give the git address of the new
> repo. Just having a blank page (and a missing hg repository, without
> any explanation) just creates head-scratching and confusion.


You've misdiagnosed at least part of the problem; there isn't a blank
page there. It's a standard bitbucket page, and clicking "clone" gives the
git repo. You said earlier:

> So, I pointed a Web browser at
> https://bitbucket.org/inferno-os/inferno-os/ and got a blank (completely
> blank) page. No 404, no error message, no headers or footers - just a
> blank white page. Peeling-off the final "/inferno-os" and trying the
> page for the account (https://bitbucket.org/inferno-os/) I got the same
> thing: just a blank page.

Both of those links work fine for me; the URLs are the same as they have
been. You've got something else going on.
> --
> You received this message because you are subscribed to the Google Groups "inferno-os" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to inferno-os+...@googlegroups.com.
> To view this discussion on the web, visit https://groups.google.com/d/msgid/inferno-os/86tucyts4g.fsf%40cmarib.ramside.

da...@boddie.org.uk

unread,
Feb 16, 2022, 6:21:24 PM2/16/22
to inferno-os
On Wednesday 16 February 2022, clasp126 wrote:

What? You mean to tell me I have to learn a new DVCS? What am I
supposed to do with all the code I've developed under Mercurial? Has
the "official" source for the OS migrated to git, or is this just a git
"mirror" of the current Mercurial repo?

It was all migrated to git.
 
The Internet has a real problem with persistency, these days. There are
very few URIs that are more than 5 years old that are still valid,
today. People move from vendor to vendor, platform to platform, domain
to domain, and technology to technology without any concern for
maintaining the accessibility or integrity of historical data. I
recently tried downloading a deep link to a data sheet for a
semiconductor sold by Atmel, and was unceremoniously redirected to the
homepage for microchip.com (which, apparently, since acquired Atmel).

You think that's bad. ARM moved their entire documentation site and, as far
as I can tell, broke all the links. It's not as if they even moved to a new domain.

 I (along with thousands of other people) chose Mercurial for my code 
because it seemed to be the best of the "big three" DVCS options
avialable at the time: Bazaar, Mercurial, and Git. Bazaar's interface
seemed to be a bit more polished than Mercurial's, but it wasn't as
widely-supported. Git, on the other hand, was an absolute mess:
overly-complicated and impossible to understand, with a non-intuitive
set of commands, and a ridiculous number of dependencies.

I would still be using Mercurial for everything but git cornered the market.
You might be able to use hg-git to interact with online git repos:
 
So, how am I supposed to contribute the changes I've committed to my
(local) Mercurial repo to the main tree, if it's now using Git? And how
am I supposed to maintain the private branches that I have in Mercurial
(which I don't plan to push to the mainline tree) now that the main
tree is in Git? Your newfangled hammer doesn't fit my nails.

Probably some kind of patch queue might do the job.

Hendrik Boom

unread,
Feb 16, 2022, 6:49:50 PM2/16/22
to inferno-os
On Wed, Feb 16, 2022 at 09:32:15PM +0000, clasp126...@icebubble.org wrote:
...
...
I quite agree. I use monotone for my own stuff.
Things I'm working on that need to be exported end up being under two
revision-control systems -- monotone and git.
One for the daily drive, the other for others to look at
when there's somethign to see.

I abhor git.

-- hendrik

Charles Forsyth

unread,
Feb 19, 2022, 8:44:39 AM2/19/22
to da...@boddie.org.uk, inferno-os
What?  You mean to tell me I have to learn a new DVCS?  What am I
supposed to do with all the code I've developed under Mercurial?  Has
the "official" source for the OS migrated to git, or is this just a git
"mirror" of the current Mercurial repo?

 I agree with the sentiment (and your and others' comments after that). As others supposed, it was only
because bitbucket discarded support for hg that I migrated it to git, and then tried to set up a mirror on github,
which rightly or wrongly is where people now look first. Having both repos hasn't really worked out, because of the different superstructure.

clasp126...@icebubble.org

unread,
Feb 19, 2022, 11:32:15 AM2/19/22
to inferno-os
Charles Forsyth <charles...@gmail.com> writes:

> As others supposed, it was only because bitbucket discarded support
> for hg that I migrated it to git,

What tool did you use to migrate the hg repo to git? I might be able to
use that to migrate my hg branches to git, and save myself the (huge)
trouble of having to diff each changeset into a separate patch for
importation into git. I've got a sizeable -dev branch that I never got
around to tossing upstream.

> and then tried to set up a mirror on github, which rightly or wrongly
> is where people now look first. Having both repos hasn't really worked
> out, because of the different superstructure.

Oh! That's important information to know! I didn't realize there was a
mirror on github. Are the incompatiblity problems between bitbucket and
github insurmountable? What would you say to making the github repo the
official repo? Bitbucket seems to work fine for some users, but not for
others. I've never had a problem with github (well, except that it only
supports git), but I've never had any problems with their Web interface.

clasp126...@icebubble.org

unread,
Mar 22, 2022, 10:51:29 PM3/22/22
to inferno-os
Charles Forsyth <charles...@gmail.com> writes:

>> What? You mean to tell me I have to learn a new DVCS? What am I
>> supposed to do with all the code I've developed under Mercurial? Has
>> the "official" source for the OS migrated to git, or is this just a git
>> "mirror" of the current Mercurial repo?
>
> I agree with the sentiment (and your and others' comments after
> that). As others supposed, it was only because bitbucket discarded
> support for hg that I migrated it to git, and then tried to set up a
> mirror on github, which rightly or wrongly is where people now look
> first.

So, I just finished reading all those tutorials and user's guides on Git
in a vulgar attempt to learn to live with this DVCS from hell. At
first, what I was reading about git began to make sense, and found this
quite encouraging. But, the more I read about git, the more confused I
became, as I began to realize that there's no rhyme, reason, symmetry,
or sense to the way git is used. The underlying database (with its four
object types and SHA-1 sums) is clever, but there is NO identifiable
model or theory of interaction for the user interface. Every command
seems to use some "magic" combination of options and parameters, with no
discernable pattern or logic. In this sense, Git is very much like a
natural language, such as English, with all sorts of irregular verbs and
noun forms (one "goose" "was" "good", but two "geese" "were" "better"?).
Fortunately, like English, Git can be learned by repeated, repeated,
repeated, repeated, repeated exposure. If you read ENOUGH about it, the
irregular patterns begin to "sink in"---even if they don't make any
sense. So, it is in this bizarre "Git as a second language" hinterland
that I currently find myself. :) :( :/


Converting Mercurial to Git
===========================

For converting Mercurial "changesets" to Git "commits", there appear to
be two main tools: "hg-fast-export" and Mercurial's "hg-git" plugin.


hg-fast-export
--------------

"hg-fast-export" can be found at https://github.com/frej/fast-export.git
It's a shell script wrapper around a Python script which, in turn,
parses Mercurial repositories and generates a bytestream suitable as
input to Git's "fast-import" (sub)command, which adds a series of
commits to a (initially empty) Git repository. In this way, an entire
Mercurial repository can be converted into a Git repository. (Details
can be found in the file named README.md.) Git's "fast-import"
mechanism is explained very well in the book "Pro Git," avalailable at:
https://github.com/progit/progit2/releases/download/2.1.337/progit.pdf


Hg-Git
------

The other tool is Hg-Git, as...

"da...@boddie.org.uk" <da...@boddie.org.uk> writes:
> You might be able to use hg-git to interact with online git repos:
> https://foss.heptapod.net/mercurial/hg-git

Unfortunately, that Web site is broken (just a blank page). Attempting
to guess the repo and clone it:

hg clone https://foss.heptapod.net/mercurial/hg-git

just returns an error stating that the site only supports the latest
version of some protocol. Fortunately, Hg-Git can be obtained from a
mirror on (of all places) github!

git clone https://github.com/schacon/hg-git

Hg-Git is a Mercurial extension which lets Mercurial push/pull hg
changesets to/from a Git repository. Hg-Git is implemented entirely in
Python, but has a dependency upon the Dulwich library, which "...is a
Python implementation of the file formats and protocols used by the Git
version control system." In order to use a repository with more than
one branch, however, Hg-Git appears to require a Mercurial "bookmark"
corresponding to each Git "branch". According to the README.md:

> Hg-Git pushes your bookmarks up to the Git server as branches and will
> pull Git branches down and set them up as bookmarks.

If the README.md doesn't provide enough ambiguous detail, additional
ambiguous detail can be found in the file DESIGN.txt.

<breath depth="deep"/>


Fitting the Pieces Together
===========================

So, all of this leaves me with a good general understanding of how
Mercurial, Git, hg-fast-export, and Hg-Git work, but with no idea how to
fit all the pieces together to solve my particular problem: I have a
bunch of commits in the Mercurial version of the Inferno repository
which I want to transplant to the new, Git version of the repository.


Maybe Using hg-fast-export?
---------------------------

hg-fast-export.sh lists the following command-line options:

Options:
--quiet Passed to git-fast-import(1)
-r <repo> Mercurial repository to import
--force Ignore validation errors when converting, and pass --force
to git-fast-import(1)
-m <max> Maximum revision to import
-s Enable parsing Signed-off-by lines
--hgtags Enable exporting .hgtags files
-A <file> Read author map from file
(Same as in git-svnimport(1) and git-cvsimport(1))
-B <file> Read branch map from file
-T <file> Read tags map from file
-M <name> Set the default branch name (defaults to 'master')
-n Do not perform built-in (broken in many cases) sanitizing
of branch/tag names.
-o <name> Use <name> as branch namespace to track upstream (eg 'origin')
--hg-hash Annotate commits with the hg hash as git notes in the
hg namespace.
-e <encoding> Assume commit and author strings retrieved from
Mercurial are encoded in <encoding>
--fe <filename_encoding> Assume filenames from Mercurial are encoded
in <filename_encoding>
--mappings-are-raw Assume mappings are raw <key>=<value> lines
--filter-contents <cmd> Pipe contents of each exported file through <cmd>
with <file-path> <hg-hash> <is-binary> as arguments
--plugin <plugin=init> Add a plugin with the given init string (repeatable)
--plugin-path <plugin-path> Add an additional plugin lookup path

This appears great if I want to convert an ENTIRE repository from
Mercurial to Git, but it doesn't appear to offer any way to specify
specific changesets or branches (sequences of changesets) to export, nor
any way to specify the parent commit(s) in the Git repo onto which the
new branches should be grafted.


Maybe Using Hg-Git?
-------------------

At first glance, Hg-Git appears more promising. But it's complicated by
the fact that Mercurial supports anonymous branches (or "dangling
heads"), while Git treats dangling heads like garbage and throws them
away when "git gc" or "git prune" are invoked. In theory, I could do
something like:

~/repos$ git clone https://bitbucket.org/inferno-os/inferno-os.git gitrepo
~/repos$ touch namelist.txt
~/repos$ cd myhg # my Inferno development repo
~/repos/myhg$ hg heads >> ../namelist.txt
~/repos/myhg$ hg tags >> ../namelist.txt
~/repos/myhg$ vim ../namelist.txt # create a table of "branch" names
~/repos/myhg$ cat ../namelist.txt | while read revspec tagspec; do
hg bookmarks -r "$revspec" "$tagspec"
done
~/repos/myhg$ hg push ../gitrepo `awk '{print $2}' < ../namelist.txt`

The problem with this is that there's no way for hg (or Hg-Git) to find
the common ancestor that the branches in namelist.txt share with the
"master" branch in gitrepo. The two repositories, ostensibly, don't
have any common history. So, presumably, this would push an entire
duplicate history(!) into gitrepo. Unfortunately, the documentation
doesn't provide any guidance regarding how a particular Mercurial
changeset maps to its corresponding Git commit, and vice versa.

Any ideas what to do, here? I mean, besides suing the Git Foundation
for injunctive relief?

da...@boddie.org.uk

unread,
Mar 23, 2022, 9:35:42 AM3/23/22
to inferno-os
On Wednesday 23 March 2022, clasp126 wrote:
Any ideas what to do, here? I mean, besides suing the Git Foundation
for injunctive relief?
 
Send patches?

clasp126...@icebubble.org

unread,
Mar 25, 2022, 1:44:17 AM3/25/22
to inferno-os
Yeah, that thought occurred to me. I could use "hg patchbomb -m" (or
just "hg export") to generate patches as if I was using an e-mail patch
workflow, copy them over to the git repo, and use "git am" to apply
them. But I don't know if Mercurial's e-mail patches and Git's e-mail
patches are format-compatible. I suspect that they're not. If they
were, then there wouldn't be any need for tools like hg-fast-export.sh.
I'd have to look into that. Do you think it might work? Have you ever
tried mixing-and-matching Git and Mercurial patches?

Georg Lehner

unread,
Mar 25, 2022, 6:47:36 AM3/25/22
to infer...@googlegroups.com
Hello,

One could still host a Mercurial repo on ones own server. That costs
some money and time, however, and does not deliver the seemingly
unlimited availability guarantees and conveniences of the existing cloud
solutions.

It's not git, which corners the market, as David Bowie states in another
message of this tread, it's Github, et.al.

I'd be happy to help the Inferno project with hosting the repository in
Mercurial, including setting up push script to Github/Bitbucket, whatsoever.

Best Regards,

  Georg

da...@boddie.org.uk

unread,
Mar 25, 2022, 2:06:47 PM3/25/22
to inferno-os
On Friday 25 March 2022, clasp126 wrote:
But I don't know if Mercurial's e-mail patches and Git's e-mail
patches are format-compatible. I suspect that they're not. If they
were, then there wouldn't be any need for tools like hg-fast-export.sh.
I'd have to look into that. Do you think it might work? Have you ever
tried mixing-and-matching Git and Mercurial patches?

It's been a while since I applied patches from Mercurial to a Git repository,
but I think the -g option in"hg export" should help with this.

I don't know if "git am" will be totally happy with the patches.
Reply all
Reply to author
Forward
0 new messages