humungus - gerc

i am gravely disappointed

there has been too much violence

overview - files - changes

151:79804d1a9d42 on 2024-05-06 02:21:32 -0400 EDT by Ted Unangst <tedu@tedunangst.com>
Tagged: tip

Added tag v0.1.5 for changeset 096fe322bf02

150:096fe322bf02 on 2024-05-06 02:21:24 -0400 EDT by Ted Unangst <tedu@tedunangst.com>
Tagged: v0.1.5

revert to cgo zstd

149:66c6d37182bb on 2023-12-20 14:17:17 -0500 EST by Ted Unangst <tedu@tedunangst.com>

Added tag v0.1.4 for changeset 8802a38593a7

148:8802a38593a7 on 2023-12-20 14:17:10 -0500 EST by Ted Unangst <tedu@tedunangst.com>
Tagged: v0.1.4

bump gozstd

147:b709780116e4 on 2022-05-06 20:34:46 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

switch to zstd that supports !cgo

146:f3a7effc03f4 on 2022-04-29 14:25:41 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

fix colorwriter to not hold buffer it doesn't own

145:9309d757aef7 on 2022-04-03 16:36:19 -0400 EDT by Ted Unangst <tedu@tedunangst.com>
Parent: 143:abb96ec42197

m

144:cc9694e8691d on 2022-04-03 16:35:11 -0400 EDT by Ted Unangst <tedu@tedunangst.com>
Parent: 142:6a4354b97d23

speed up diff by using the previous revision we already have.

143:abb96ec42197 on 2022-03-30 03:07:02 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

try coloring log diffs

142:6a4354b97d23 on 2022-03-28 14:27:12 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

one less pointer indirection

141:d22480ba4183 on 2022-03-28 14:18:00 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

clean up a bit

140:95fe73b5c422 on 2022-03-28 13:44:54 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

spoiler: it's actually slower

139:c5b91acebe2d on 2022-03-28 13:44:34 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

make revlog "faster" by copying less data

138:9f4bd727eb3d on 2022-03-28 01:56:36 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

compute more deeper sha1

137:83902de5c15c on 2022-03-27 20:22:17 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

compute sha1 for changes

136:e786b96293d7 on 2022-03-27 20:00:01 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

dumb global snuck in

135:f4cf5895389a on 2022-03-27 13:52:09 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

note compression (

134:6f17f864c462 on 2022-01-31 13:20:08 -0500 EST by Ted Unangst <tedu@tedunangst.com>

partial implementation of status

133:b80ed7f23875 on 2022-01-30 15:32:12 -0500 EST by Ted Unangst <tedu@tedunangst.com>

Added tag v0.1.3 for changeset 08957fecb2df

132:08957fecb2df on 2022-01-29 15:27:59 -0500 EST by Ted Unangst <tedu@tedunangst.com>
Tagged: v0.1.3

zstd support

131:618be443820f on 2021-04-06 21:41:27 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

need to read tag file from within store, not filesystem

130:cfd806cb0483 on 2020-11-30 22:16:53 -0500 EST by Ted Unangst <tedu@tedunangst.com>

add license

129:5922e0e0a098 on 2020-05-22 23:36:14 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

add the colorizer code too

128:63f937bc7dbc on 2020-05-22 01:30:47 -0400 EDT by Ted Unangst <tedu@tedunangst.com>
Parent: 126:088712bd4feb

m

127:a3ea98f5fae3 on 2020-05-22 01:28:24 -0400 EDT by Ted Unangst <tedu@tedunangst.com>
Parent: 124:114017f0b0bb

colorized diff

126:088712bd4feb on 2020-05-21 21:24:15 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

basic usage

125:c4789759c19a on 2020-05-21 21:20:37 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

typo

124:114017f0b0bb on 2020-01-15 23:57:59 -0500 EST by Ted Unangst <tedu@tedunangst.com>

Added tag v0.1.2 for changeset a6f9e572fd86

123:a6f9e572fd86 on 2020-01-15 23:57:21 -0500 EST by Ted Unangst <tedu@tedunangst.com>
Tagged: v0.1.2

if delta data is empty, no deltas

122:7703c87d6357 on 2019-11-16 02:05:50 -0500 EST by Ted Unangst <tedu@tedunangst.com>

align tags output

121:33a14544372a on 2019-11-16 01:56:26 -0500 EST by Ted Unangst <tedu@tedunangst.com>

don't count tags that have been deleted

120:9ad3d31de412 on 2019-11-08 23:32:51 -0500 EST by Ted Unangst <tedu@tedunangst.com>

cache frequently used fds

119:2cf7eb718166 on 2019-11-08 20:23:23 -0500 EST by Ted Unangst <tedu@tedunangst.com>

Added tag v0.1.1 for changeset 5a4e4fb32602

118:5a4e4fb32602 on 2019-11-08 20:23:16 -0500 EST by Ted Unangst <tedu@tedunangst.com>
Tagged: v0.1.1

need to handle the .d datafile case now

117:835ed063e4b8 on 2019-10-26 20:09:30 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

print a hint with the diff

116:68efdd09dfad on 2019-10-23 20:34:31 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

slightly easier to follow

115:510274797dec on 2019-10-23 19:34:04 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

Added tag v0.1.0 for changeset dcd9019e67c3

114:dcd9019e67c3 on 2019-10-23 19:20:32 -0400 EDT by Ted Unangst <tedu@tedunangst.com>
Tagged: v0.1.0

explain why we need another copy

113:0c7eae726e41 on 2019-10-23 19:17:53 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

print parent revisions when not obvious

112:a44f6f69d109 on 2019-08-21 19:38:37 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

use per file last change timestamp

111:83009e6bf670 on 2019-08-20 21:59:49 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

forgot about usage

110:a1ca80970c6d on 2019-08-20 21:47:44 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

add diff command, for comparing work files vs repo

109:3a1e66821f0b on 2019-04-28 17:10:52 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

ancestors go the other way

108:a04918eff360 on 2019-04-28 17:08:03 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

a go.mod file

107:0a2f92fef641 on 2019-04-28 17:07:27 -0400 EDT by Ted Unangst <tedu@tedunangst.com>

incomplete and wrong ancestor adjustment for revlog

106:55f0812f351a on 2019-02-22 16:59:11 -0500 EST by Ted Unangst <tedu@tedunangst.com>

move all argv string parsing into frontend.
programmatic args for library functions

105:cd76189d32c4 on 2019-02-20 14:33:55 -0500 EST by Ted Unangst <tedu@tedunangst.com>

a hack to walk backwards to find last existing rev for annotate

104:3043d9055600 on 2019-02-20 14:06:21 -0500 EST by Ted Unangst <tedu@tedunangst.com>

add a package comment for main

103:d6c494ca8075 on 2019-02-20 13:59:38 -0500 EST by Ted Unangst <tedu@tedunangst.com>

split big file into small files

102:13ca781603b8 on 2019-02-20 13:50:40 -0500 EST by Ted Unangst <tedu@tedunangst.com>

add annotate support

101:6ea98b29c2da on 2019-02-18 18:16:23 -0500 EST by Ted Unangst <tedu@tedunangst.com>

rename a variable to be clearer

100:49d6b652dc73 on 2019-02-18 18:14:39 -0500 EST by Ted Unangst <tedu@tedunangst.com>

add go doc for public functions

99:0371433cf418 on 2019-02-16 22:57:41 -0500 EST by Ted Unangst <tedu@tedunangst.com>

-r last() is also easy to handle

98:5a979d962187 on 2019-02-16 18:41:29 -0500 EST by Ted Unangst <tedu@tedunangst.com>

add tags command

97:d817704d7a78 on 2019-02-16 17:46:52 -0500 EST by Ted Unangst <tedu@tedunangst.com>

handle a few special cases for filenames

96:9dc14358b77f on 2019-02-16 04:05:35 -0500 EST by Ted Unangst <tedu@tedunangst.com>

replace writestring with fprintf

95:382a3b2c89db on 2019-02-16 01:03:45 -0500 EST by Ted Unangst <tedu@tedunangst.com>

tune up the data/metadata handling a bit

94:a63e4b9bad8c on 2019-02-16 00:48:06 -0500 EST by Ted Unangst <tedu@tedunangst.com>

works a little better if the caller adds the extra newline

93:681764395b1d on 2019-02-16 00:38:04 -0500 EST by Ted Unangst <tedu@tedunangst.com>

refine change printing code

92:e137340f782d on 2019-02-16 00:24:28 -0500 EST by Ted Unangst <tedu@tedunangst.com>

print tags in log

91:a1d93c4eba95 on 2019-02-16 00:12:21 -0500 EST by Ted Unangst <tedu@tedunangst.com>

parse tags file and be more flexible about hash lookups

90:3ba729e545c6 on 2019-02-15 21:50:29 -0500 EST by Ted Unangst <tedu@tedunangst.com>

remove bad check for empty files

89:381080d9761a on 2019-02-15 21:46:48 -0500 EST by Ted Unangst <tedu@tedunangst.com>

remove metadata from revlog data. ignored for now.

88:43062c24d1ce on 2019-02-14 04:16:30 -0500 EST by Ted Unangst <tedu@tedunangst.com>

simpler and safer to make a function to split bytes to lines

87:f0529006659a on 2019-02-14 04:13:23 -0500 EST by Ted Unangst <tedu@tedunangst.com>

check len of right slice

86:558cef2ba1dd on 2019-02-14 03:43:47 -0500 EST by Ted Unangst <tedu@tedunangst.com>

an empty file isn't missing its newline

85:57eeeae5a538 on 2019-02-14 03:34:29 -0500 EST by Ted Unangst <tedu@tedunangst.com>

not allowed to dig into .hg either

84:de9ac73427f4 on 2019-02-14 03:29:29 -0500 EST by Ted Unangst <tedu@tedunangst.com>

check that filenames are inside the repo

83:e1a57965924e on 2019-02-14 01:48:25 -0500 EST by Ted Unangst <tedu@tedunangst.com>

reverse logic of missingnl to be hasnl

82:8693c378edc0 on 2019-02-14 01:04:27 -0500 EST by Ted Unangst <tedu@tedunangst.com>

it's a feature not a bug

81:f9231e7d519f on 2019-02-13 21:52:50 -0500 EST by Ted Unangst <tedu@tedunangst.com>

can binary search the manifest instead of scanning

80:fbcd606ab905 on 2019-02-13 16:44:14 -0500 EST by Ted Unangst <tedu@tedunangst.com>

try finding unqiue lines, but still do the first pass with anything we find

79:a1f36b76a958 on 2019-02-13 00:10:03 -0500 EST by Ted Unangst <tedu@tedunangst.com>

clear revlog cache after close

78:b748318a8d2e on 2019-02-12 23:05:01 -0500 EST by Ted Unangst <tedu@tedunangst.com>

parse limit(range, limit) revnums too

77:2142b80639a7 on 2019-02-12 22:49:14 -0500 EST by Ted Unangst <tedu@tedunangst.com>

start parsing revnums in date format. today and yesterday.
this is starting to get troublesome.

76:87a4e2a3872d on 2019-02-12 21:31:13 -0500 EST by Ted Unangst <tedu@tedunangst.com>

leave the message as an array

75:b769b0f57294 on 2019-02-12 02:27:31 -0500 EST by Ted Unangst <tedu@tedunangst.com>

formatting tweaks

74:803e21d283fd on 2019-02-12 02:15:01 -0500 EST by Ted Unangst <tedu@tedunangst.com>

cache changes after parsing, but be careful not to cache diffs

73:ddc520b29c22 on 2019-02-12 01:43:49 -0500 EST by Ted Unangst <tedu@tedunangst.com>

need to slice off unused end of data after applying deltas

72:3ccbab7ad82b on 2019-02-12 01:41:35 -0500 EST by Ted Unangst <tedu@tedunangst.com>

nevermind, the ulen is uncompressed full data len, not just this chunk

71:a47282eb7bb8 on 2019-02-12 01:27:56 -0500 EST by Ted Unangst <tedu@tedunangst.com>

using a scratch alice between delta application massively reduces allocs

70:271eb12f1b37 on 2019-02-12 00:16:16 -0500 EST by Ted Unangst <tedu@tedunangst.com>

allocs profile is more interesting

69:29b331b0cf4d on 2019-02-12 00:16:07 -0500 EST by Ted Unangst <tedu@tedunangst.com>

can presize uncompress buffer

68:a1f51ff8d19f on 2019-02-11 19:46:28 -0500 EST by Ted Unangst <tedu@tedunangst.com>

print the correct dates in changesets

67:f7ba4dfa9a28 on 2019-02-11 19:04:19 -0500 EST by Ted Unangst <tedu@tedunangst.com>

limiting to one cpu is much faster

66:0e1d9a585c43 on 2019-02-11 18:58:59 -0500 EST by Ted Unangst <tedu@tedunangst.com>

fix calculation of offsets in unidiff

65:b38995b34432 on 2019-02-11 18:53:00 -0500 EST by Ted Unangst <tedu@tedunangst.com>

another peephole fixup: sometimes chunks get combined + then -. reverse them.

64:02a04d912a96 on 2019-02-11 18:16:37 -0500 EST by Ted Unangst <tedu@tedunangst.com>

revert boring check, doesn't help and makes some diffs worse

63:69ed92250646 on 2019-02-11 16:10:59 -0500 EST by Ted Unangst <tedu@tedunangst.com>

missing new line in printf

62:e9dad0571abb on 2019-02-11 15:49:58 -0500 EST by Ted Unangst <tedu@tedunangst.com>

skip boring lines for matches

61:b1d3908b2daa on 2019-02-11 14:46:46 -0500 EST by Ted Unangst <tedu@tedunangst.com>

allow cat of any revision

60:557a32627328 on 2019-02-11 14:26:31 -0500 EST by Ted Unangst <tedu@tedunangst.com>

fix missing context line

59:219467ce450b on 2019-02-11 14:25:27 -0500 EST by Ted Unangst <tedu@tedunangst.com>

test for trailing context

58:dfdaf224008a on 2019-02-11 14:01:20 -0500 EST by Ted Unangst <tedu@tedunangst.com>

understand tip to mean -1

57:9459a01dff23 on 2019-02-11 13:53:40 -0500 EST by Ted Unangst <tedu@tedunangst.com>

rename author to user

56:426a9248c175 on 2019-02-11 02:32:09 -0500 EST by Ted Unangst <tedu@tedunangst.com>

a few cleanups

55:f6b327d55c33 on 2019-02-11 02:17:19 -0500 EST by Ted Unangst <tedu@tedunangst.com>

map linkrevs to index

54:9e7c6cfe8253 on 2019-02-11 02:08:17 -0500 EST by Ted Unangst <tedu@tedunangst.com>

slowly working diffing prev revisions into shape

53:603fa15a2b55 on 2019-02-11 01:33:07 -0500 EST by Ted Unangst <tedu@tedunangst.com>

fold diff fetching into main change loop

52:0d4c2234a809 on 2019-02-11 01:26:19 -0500 EST by Ted Unangst <tedu@tedunangst.com>

fix check for corrupted delta

51:2d89ed05d572 on 2019-02-11 01:23:44 -0500 EST by Ted Unangst <tedu@tedunangst.com>

use a bufio for reading files

50:c0bfb70d266b on 2019-02-11 00:58:57 -0500 EST by Ted Unangst <tedu@tedunangst.com>

give parsedeltas the zero copy treatment too

49:8e7774c8d001 on 2019-02-11 00:51:34 -0500 EST by Ted Unangst <tedu@tedunangst.com>

perf improvement: much less copying when applying deltas

48:fe6f3de1a9fb on 2019-02-11 00:47:22 -0500 EST by Ted Unangst <tedu@tedunangst.com>

perf improvement: cache all revlogs instead of reopening

47:a776d2ff4fab on 2019-02-11 00:29:15 -0500 EST by Ted Unangst <tedu@tedunangst.com>

global flags for profiling

46:85dc6e8fd320 on 2019-02-10 23:36:38 -0500 EST by Ted Unangst <tedu@tedunangst.com>

add a few tests for cases that have tricked patience in the past

45:edff589404cf on 2019-02-10 23:36:07 -0500 EST by Ted Unangst <tedu@tedunangst.com>

further fixes and refinements to diff

44:e60b405fcd60 on 2019-02-10 20:45:21 -0500 EST by Ted Unangst <tedu@tedunangst.com>

improved diff creation

43:1ba7796d71ba on 2019-02-10 20:33:32 -0500 EST by Ted Unangst <tedu@tedunangst.com>

there can be more than one boring line, don't skip too far ahead

42:f5781a7d6084 on 2019-02-10 20:26:20 -0500 EST by Ted Unangst <tedu@tedunangst.com>

a few tweaks to the peephole for prettier diffs

41:abcd76d44800 on 2019-02-10 20:10:30 -0500 EST by Ted Unangst <tedu@tedunangst.com>

debug print keeps sneaking in

40:6ce5be315715 on 2019-02-10 20:09:16 -0500 EST by Ted Unangst <tedu@tedunangst.com>

only uncount context lines in one loop

39:8ddbf7307214 on 2019-02-10 20:04:33 -0500 EST by Ted Unangst <tedu@tedunangst.com>

eat -u for diff compat

38:a1a753b5299b on 2019-02-10 19:57:59 -0500 EST by Ted Unangst <tedu@tedunangst.com>

some fixes for the amount of context in diffs

37:270d2932c75f on 2019-02-10 19:49:52 -0500 EST by Ted Unangst <tedu@tedunangst.com>

missing newline in error message

36:d1234199e4d3 on 2019-02-10 19:49:30 -0500 EST by Ted Unangst <tedu@tedunangst.com>

use diff now that it works instead of toying with deltas

35:3f75e00ff0ef on 2019-02-10 19:18:53 -0500 EST by Ted Unangst <tedu@tedunangst.com>

there's no diff if there's no diff

34:4610447e84b1 on 2019-02-10 19:09:47 -0500 EST by Ted Unangst <tedu@tedunangst.com>

try recursing one time

33:9f8c13a43a8c on 2019-02-10 18:59:30 -0500 EST by Ted Unangst <tedu@tedunangst.com>

update comment

32:692abbdefe18 on 2019-02-10 18:56:50 -0500 EST by Ted Unangst <tedu@tedunangst.com>

the one line skipper causes more trouble than its worth

31:ae3b44fa45f8 on 2019-02-10 17:40:46 -0500 EST by Ted Unangst <tedu@tedunangst.com>

paste error in bounds check

30:d5e90638b36d on 2019-02-10 17:39:20 -0500 EST by Ted Unangst <tedu@tedunangst.com>

not quite correct handling of files missing final newlines

29:75edef56c1ca on 2019-02-10 17:25:10 -0500 EST by Ted Unangst <tedu@tedunangst.com>

struct of slices is too much trouble to work with.
back to slice of structs

28:7c6008c210aa on 2019-02-10 17:08:49 -0500 EST by Ted Unangst <tedu@tedunangst.com>

ok, getting silly, but add a peephole optimizer for a few more blank line cases

27:7e592d895389 on 2019-02-10 16:30:53 -0500 EST by Ted Unangst <tedu@tedunangst.com>

handle a few special cases when creating diffs

26:c65d702c4add on 2019-02-10 03:53:22 -0500 EST by Ted Unangst <tedu@tedunangst.com>

possible for a p2 line to be at 0

25:b0ab09642f41 on 2019-02-10 03:51:00 -0500 EST by Ted Unangst <tedu@tedunangst.com>

actually save space by using byte instead of rune

24:a19c44df6caf on 2019-02-10 03:48:53 -0500 EST by Ted Unangst <tedu@tedunangst.com>

use two slices instead of wasting padding

23:fd5f5719e0c7 on 2019-02-10 03:26:30 -0500 EST by Ted Unangst <tedu@tedunangst.com>

add an implementation of patience diffing algorithm

22:41b8b28ee893 on 2019-02-09 17:42:33 -0500 EST by Ted Unangst <tedu@tedunangst.com>

fix revision fetching with a filename

21:98c606cc2582 on 2019-02-09 17:30:58 -0500 EST by Ted Unangst <tedu@tedunangst.com>

negative revisions are pretty easy

20:73bda4fa3320 on 2019-02-09 17:02:37 -0500 EST by Ted Unangst <tedu@tedunangst.com>

parse hex revs too

19:fc409a860c14 on 2019-02-09 16:46:17 -0500 EST by Ted Unangst <tedu@tedunangst.com>

start parsing revnums as ranges

18:c24ab9b3e078 on 2019-02-09 16:09:50 -0500 EST by Ted Unangst <tedu@tedunangst.com>

ah ha! baserev chain can be linear or not linear depending on flag.

17:a807190023d9 on 2019-02-09 15:26:12 -0500 EST by Ted Unangst <tedu@tedunangst.com>

don't go past end getting forw context

16:1e8254a8c0ad on 2019-02-09 15:23:52 -0500 EST by Ted Unangst <tedu@tedunangst.com>

storename: _ is __

15:b6e7fa26cd7b on 2019-02-07 23:08:27 -0500 EST by Ted Unangst <tedu@tedunangst.com>

fixes for context diffs

14:f663acdd7f34 on 2019-02-07 22:44:03 -0500 EST by Ted Unangst <tedu@tedunangst.com>

baserev is linear? real bug was skipping one?

13:edc298b859a3 on 2019-02-07 22:24:00 -0500 EST by Ted Unangst <tedu@tedunangst.com>

fix a bug where we would skip to base for short chains

12:d3eb85201179 on 2019-02-07 20:46:41 -0500 EST by Ted Unangst <tedu@tedunangst.com>

want the list of files in the changeset, not the manifest

11:78e0bccb502d on 2019-02-07 20:42:43 -0500 EST by Ted Unangst <tedu@tedunangst.com>

cheating method can't compute diffs from full revisions

10:4dd67533c0c8 on 2019-02-07 20:27:51 -0500 EST by Ted Unangst <tedu@tedunangst.com>

add the spec for known file formats

9:65c949daad12 on 2019-02-07 20:27:26 -0500 EST by Ted Unangst <tedu@tedunangst.com>

fix storename escaping

8:4bb26991f69e on 2019-02-07 20:11:54 -0500 EST by Ted Unangst <tedu@tedunangst.com>

the baserev chain may not be linear

7:06249f11a8d0 on 2019-02-07 17:37:02 -0500 EST by Ted Unangst <tedu@tedunangst.com>

copyright and readme

6:6b1e71231fa4 on 2019-02-07 17:05:45 -0500 EST by Ted Unangst <tedu@tedunangst.com>

allow closing a repo

5:4415a011eca5 on 2019-02-07 16:58:39 -0500 EST by Ted Unangst <tedu@tedunangst.com>

sometimes the baserev isn't the baserev...

4:f997fd5879e9 on 2019-02-07 16:25:12 -0500 EST by Ted Unangst <tedu@tedunangst.com>

support name args for files

3:cf75d73bc9eb on 2019-02-07 15:23:45 -0500 EST by Ted Unangst <tedu@tedunangst.com>

smooth some delta operations

2:5e151596ccb6 on 2019-02-07 15:20:34 -0500 EST by Ted Unangst <tedu@tedunangst.com>

make a repo object instead of global

1:a4d556f33a6b on 2019-02-07 15:00:05 -0500 EST by Ted Unangst <tedu@tedunangst.com>

quick conversion to package and main

0:72632148c6cd on 2019-02-07 14:11:30 -0500 EST by Ted Unangst <tedu@tedunangst.com>

good enough revision control.
good enough to run a few commands anyway.