This post inspired by a few problems with my subversion copy of fpc, fpc documentation, and lazarus when I want to compile them. All of them can be described in three, gorgeous, seemingly-important bullet-points:
- First of all, I have them on my home directory which is fine until I want to compile. At that moment I just have to copy or export the entire tree because I’m a neat guy and it doesn’t strike me as an acceptable situation when build-generated files sprawled all over the place.
- Second, I have set up a Mercurial repository on my private server and this thing sits on my home directory adding unnecessary burden when I have to backup stuff. Besides, when I want to have it on different computer I would like to be able to grab it from my server, not my desktop computer —which is only accessible to others when my server is powered on, a “feature” in my network topology.
- Third, I like Mercurial (or distributed revision control in general) workflow.
I found out about hgsvn and set to try it. After a browse-reading, I think I know how to use this thingie. I ssh’d to my server and browsed to my Mercurial repository dir.
First lets start with the smallest:
fpcdocs. Small enough for an import straight from the fpcdocs svn server.
me@server$ hgimportsvn -v -r 710 http://svn.freepascal.org/svn/fpcdocs/trunk fpcdocs me@server$ cd fpcdocs me@server$ hgpullsvn
Importing From Working Copy
For the next two project (fpc and lazarus), I decided not to re-download it from the project’s subversion server because my internet connection is slow and it is unbearable to download (again) what I already have. So I decided to try to import from working copy. See
Since my working copy of lazarus and fpc is inside my home directory on the desktop computer I have to switch back to my desktop computer to copy it using
scp. I browsed into
~/programming/pascal/followed/, a directory appropriately named to contain local copy of followed projects, before invoking the copy command.
me@desktop$ cd ~/programming/pascal/followed/ me@desktop$ scp -qr fpc lazarus me@server://tmp/
The last line is to copy directory named
lazarus, located in
/tmp/ on the server computer. Anyway it took a while on my network, a rather slow for the impatient as myself, but then again I was streaming music :D.
For some reason scp unable to copy two MacOS-related files. This is the message:
lazarus/lazarus.app/Contents/Resources/startlazarus.app/Contents/MacOS/startlazarus: No such file or directory lazarus/lazarus.app/Contents/MacOS/lazarus: No such file or directory
I pondered on it for a while, this looks like a symlink-gone-bad problem and I think an
svn update can fix this. So I switched to my server computer, using
me@desktop$ fg me@server$ cd /tmp/lazarus/ me@server$ svn update me@server$ cd /tmp/fpc/ me@server$ svn update
The update on
fpc reverted some file and it fixed copying related problems. Yay, everything looks okay again.
Now, to make this working copy talk and walk as a Mercurial repository I have to run
me@server$ cd /tmp/ me@server$ hgimportsvn --local-only /tmp/fpc/ me@server$ hgimportsvn --local-only /tmp/lazarus/
The process of transforming into a Mercurial repository took a while. After all set and done I move the two to the appropriate location, right next to
fpcdocs which have been discussed earlier.
me@server$ mv fpc lazarus /media/repodisk/mercurial/FreePascal/
That command will move
lazarus to where my Mercurial repositories is located; which also monitored by hgweb to provide web-interface to Mercurial repository.
After creating two
hgrc file one for each repository, modifying
.hgignore and doing the obligatory file-ownership changes I ran a test-drive by browsing and downloading the newly-created repositories via browser.
I can see everything is working as expected, with one minor annoyance that I can live with: no history from subversion “days”. Oh well.