?

Log in

No account? Create an account
'Twas brillig, and the slithy toves did gyre and gimble in the wabe [entries|archive|friends|userinfo]
Thomas

[ website | Beware the Jabberwock... ]
[ deviantArt | the-boggyb ]
[ FanFiction | Torkell ]
[ Tumblr | torkellr ]

Links
[Random links| BBC news | Vulture Central | Slashdot | Dangerous Prototypes | LWN | Raspberry Pi]
[Fellow blogs| a Half Empty Glass | the Broken Cube | The Music Jungle | Please remove your feet | A letter from home]
[Other haunts| Un4seen Developments | Jazz 2 Online | EmuTalk.net | Feng's shui]

[Thursday 6th January 2011 at 7:59 pm]
Thomas

boggyb
[Tags|]
[Feeling |annoyedannoyed]

Today I ended up wanting to check if various bits of code have changed, so I could find out if I actually needed to rebuild stuff or not...

Me: Gimme the history for that subdirectory in that repository over there.
CVS: Here you go. I'll spam you about every single tag though, just in case you needed to know that as well.
Me: Okay, I can deal with that.

Me: Gimme the history for that subdirectory in that repository over there.
SVN: Sure, go ahead. Here, I'll even give you a GUI that works (TortoiseSVN), and give you a useful summary and optional details on those commits.
Me: Yay!

Me: Gimme the history for that subdirectory in that repository over there.
Mercurial: No can do, mate. I'm a distributed version control system, that means that the client does all the slow changeset-parsing work.
Me: What, seriously? Fine, gimme the subdirectory and I'll run the log locally.
Mercurial: No can do, it's all or nothing mate. If you wanted a single subdirectory then you should have split it into a separate repository when you created it.
Me: Grumble grumble. Fine, give me the entire 500MB repository.
Mercurial: Sure, lemme think about it for a while... uh-oh, you're using a network share, this means I shall give up after ten minutes because of an operating system limitation/bug that we've not added a workaround for. Except I won't actually tell you that, but just say "[Errno 22] Invalid argument". Muwhahaha.
Me: Grumble rant grumble. Fine, clone it to the local drive instead. All I want is the history anyway.
Mercurial: Sure, lemme chew on your processor for fifteen minutes while I take every single diff and then apply them in order... done!
Me: Finally! Now gimme the history for that subdirectory.
Mercurial: Here you go. Here's the first line of each commit comment.
Me: Grumble rant grumble rant. Those commit comments are multi-line, and the first line is useless! Fine, gimme the verbose history.
Mercurial: Okay, but I'm going to tell you about every single file that was changed in each of those commits even though you only care about this subdirectory. Oh, and I'm also going to claim that a couple dozen other files have changed, even though they haven't really, because I'm confused and think that someone merged tip into their branch (because I'm distributed and so there's no actual One True Source Archive).
Me: So you mean it's not clear if anything's actually changed or not since the last build? Argh!
Link | Previous Entry | Share | Flag | Next Entry[ 4 pennies | Penny for your thoughts? ]

Comments:
[User Picture]From: olego
Friday 7th January 2011 at 1:11 am (UTC)
Yikes!

First, despite grumbing at Microsoft's Team Foundation Server, it does have a very useful history command, which also features an [optional] GUI.

Second, the interesting fact is that I was aware of this limitation because of Halo 2. Halo 2 came out on Vista, and the installer (and the game) would shut down if it detected XP or below. To circumvent that, people created a loader that inserts a single hook into the software, and respond differently to the GetWindowsVersion API.

However, one of the levels of Halo2 was over 64MB in size--and so they had to write a second loader, that would also hook into ReadFileEx() and do its own data management behind the scenes. That's how I was able to finish the game! ^_^
(Reply) (Thread)
[User Picture]From: boggyb
Friday 7th January 2011 at 7:16 pm (UTC)
We have a lot of stuff in Visual SourceSafe, which I've actually found to be rather civilised to work with. The history in it is pretty good as well. It's killer feature that I've not seen in the ones I ranted about is that you can share files between folders. Unfortuantly branches are an absolute joke in it - the way you branch something is to share a folder tree into a new folder, then split the files (so revisions are no longer shared). As a result one repository has a lot of top level folders like "FooProduct 1.0", "FooProduct 1.1", "FooProduct 1.2", ...
(Reply) (Parent) (Thread)
[User Picture]From: tau_iota_mu_c
Friday 7th January 2011 at 12:55 pm (UTC)
Yikes! Could you please post the version of this conversation with git?
(Reply) (Thread)
[User Picture]From: boggyb
Friday 7th January 2011 at 7:11 pm (UTC)
I've never used git. Is it any less brain-dead than Mercurial?

Rant aside, I do actually like the fact that I can easily do checkins on a local branch and merge stuff without getting in the way of anyone else working on the same project. The trouble I've found with Mercurial is that it's completely distributed, so there's no such thing as a master repository (so you don't actually tag a point in time, but rather a specific changeset on someone's branch). I think what I'd really like is a source control system that had a master repository, but let you have a local-to-your-client branch that others could copy and merge into their local-to-their-client branches.
(Reply) (Parent) (Thread)