My name is Paul Bissex, and e-scribe.com is my consulting business. I build web applications using as much open source software as possible. From September to June I teach web design and other important non-photographic professional skills to photographers. In the '90s I wrote technology commentary and reviews for magazines, newspapers, and web publications, including Wired, Salon.com, FamilyPC, the late lamented Web Review, and the Chicago Tribune. Feel free to email me.
I'm co-authoring a book, "Python Web Development with Django", with Jeff Forcier and Wesley Chun. It will be published by Prentice Hall in July 2008, but is available for pre-ordering on Amazon now.
This site is built on a fresh trunk checkout of Django, running on Python 2.5.1, served by Apache and mod_python. The database is SQLite. The operating system is FreeBSD, on a VPS hosted at Johncompanies.com. Comment-spam protection by Akismet. Vintage topo imagery from the Maptech archive.
Akismet, del.icio.us, Django, dpaste.com, Emacs, FreeBSD, Freenode, jQuery, LaunchBar, MacPorts, Markdown, Mercurial, OS X, Postfix, Python, SQLite, Subversion, TextMate, Trac, Ubuntu Linux, wmii
Copyright 2008
by Paul Bissex
and E-Scribe New Media
I banged my head against this one for a while before figuring it out, so I'm posting the solution -- for my own future reference if nothing else.
I've been working on extending Textmate's Markdown language bundle. The development versions of the bundles are stored in a repository managed by Subversion.
I noticed that the bundle's name started with a lowercase letter, unlike the other bundles, so I did a quick svn mv to fix it:
$ svn mv markdown.tmbundle Markdown.tmbundle
but I got this perplexing error message in response:
svn: Working copy 'Markdown.tmbundle' is missing or not locked
I Googled extensively on "svn working copy" + "is missing or not locked" but the pages I found either referenced a bug that didn't apply to my situation (nested directories named the same as the parent) or advice that didn't solve the problem (svn revert or deleting the local copy and refreshing from the repository).
Some of the bug references made me suspicious of Subversion 1.2.x so I also tried downgrading to 1.1.x. Same problem.
I deleted the entire working copy and tried again with a fresh checkout. Same problem.
Eventually a lightbulb came on: the Mac's HFS+ filesystem is case-insensitive (though case-preserving). Subversion's "move" operation is actually a "copy" followed by a "remove" -- but on an HFS+ volume, the copy step will fail when the only difference in filenames is a case-change. Aha.
The obvious fix:
$ svn mv markdown.tmbundle Markdown2.tmbundle
$ svn ci
$ svn mv Markdown2.tmbundle Markdown.tmbundle
$ svn ci
Afterward I found an entry in the Subversion FAQ that addresses this problem, with an alternate solution that involves renaming the file on the server and then updating the working copy.
I can't believe I went through all that to capitalize a single letter. Future generations will thank me, I'm sure.
This is broken behavior by Subversion, I don't care what the developers say. Allowing devs to change the capitalization of files without going through a ridiculous hassle isn't "coding around the broken behavior" of Windows or any other case-insensitive OS, (as I've once read somewhere). Case-insensitivity in an OS does not make the OS "broken".
Also keep in mind that you can format/mount a disk image or external drive as "HFS+X", rather than "HFS+J", which is the default for Mac OS X Server. All Apple Software and Cocoa-built code will work fine, as well as typical *nix software. When I met members of the Darwin / FS team at WWDC one year, they explained that Case Insensitivity is mostly for Carbon Apps, which are mostly Microsoft apps like Office X - FireFox has used Carbon apis for some time, but does not for any sort of file access.
Disk Utility will help with this. Also, if you run Disk Utility during OSX install, you can reformat your drive as HFS+X and install on it, though the installer won't give you this option - you must run DU via the Utilities menu right when the Installer boots up. I've done this with fine success, though I often forget to and when I get a new Mac, often don't want to go through the trouble.
In some situations with older cvs repositories, you'll find that you simply can't make a checkout without case sensitivity. A disk image is often useful here.
Comments use Markdown syntax. Your comment will not appear until approved, which may take a few hours or more. Spammers will be torpedoed.
The iPhone keyboard doesn't suck
Python one-liner of the day
7 comments
How not to advocate via Google Code
2 comments
99 problems
3 comments
bitmonk
Obscure "svn mv" problem solved
98 days ago
Charlie
Book news: Rough Cuts and Amazon
99 days ago
Simon Griffee
Django Mercurial mirror tweaks
116 days ago
Jason Calleiro
From PHP to Python
117 days ago
Yuli
dpaste.com
120 days ago
bruce
Neat Python hack: infix operators
124 days ago
David Reynolds
The original Lego Star Wars
132 days ago
At least 38476 pieces of comment spam killed since January 12th. Thanks are mostly due to Akismet.
I think this happens when you want to change only upper-/lowercase. MacOS doesn't accept files/folder with same name but different "capitalization". Linux/Unix do.