Jens Alfke avatar Jens Alfke committed 5e0ddb3

* Always show the magic 'current' revision in the list, even if there aren't any changes in it; this seems less confusing.
* Improved formatting of revision info pane.
* Revision info shown on initial window load.

Comments (0)

Files changed (9)

English.lproj/Repo.xib

 <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03">
 	<data>
 		<int key="IBDocument.SystemTarget">1050</int>
-		<string key="IBDocument.SystemVersion">9J61</string>
+		<string key="IBDocument.SystemVersion">9G55</string>
 		<string key="IBDocument.InterfaceBuilderVersion">677</string>
-		<string key="IBDocument.AppKitVersion">949.46</string>
+		<string key="IBDocument.AppKitVersion">949.43</string>
 		<string key="IBDocument.HIToolboxVersion">353.00</string>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
-			<integer value="300213"/>
-			<integer value="300060"/>
+			<integer value="300032"/>
 		</object>
 		<object class="NSArray" key="IBDocument.PluginDependencies">
 			<bool key="EncodedWithXMLCoder">YES</bool>
 													<int key="NSvFlags">256</int>
 													<string key="NSFrameSize">{571, 184}</string>
 													<reference key="NSSuperview" ref="61754055"/>
-													<reference key="NSWindow"/>
 													<bool key="NSEnabled">YES</bool>
 													<object class="NSTableHeaderView" key="NSHeaderView" id="288602249">
 														<reference key="NSNextResponder" ref="516652966"/>
 														<int key="NSvFlags">256</int>
 														<string key="NSFrameSize">{571, 17}</string>
 														<reference key="NSSuperview" ref="516652966"/>
-														<reference key="NSWindow"/>
 														<reference key="NSTableView" ref="392325734"/>
 													</object>
 													<object class="_NSCornerView" key="NSCornerView" id="656633742">
 														<int key="NSvFlags">256</int>
 														<string key="NSFrame">{{572, 0}, {16, 17}}</string>
 														<reference key="NSSuperview" ref="214279069"/>
-														<reference key="NSWindow"/>
 													</object>
 													<object class="NSMutableArray" key="NSTableColumns">
 														<bool key="EncodedWithXMLCoder">YES</bool>
 																			<reference ref="8"/>
 																			<object class="NSCachedImageRep">
 																				<object class="NSData" key="NSTIFFRepresentation">
-																					<bytes key="NS.bytes">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
-eah6rnuqfKJ9nX6Yf5yAm4GegqKDp4Srha6GrYetiK+JqYqli5yMkI2DjnKPZpBrkW6Sc5N2lHeVdJZu
-l2mYX5lTmkabOJwnnROd/p7pn9OguaGfooijc6RwpW+mbqduqGupZ6piq1usU61MrkWvPrA3sTCyKbMk
-tB+1HLYbtxq4Ebj4uc+6oLt0vEe9Gb3svr+/lMBswUTCHcL5w9bEtcWUxnbHWcg/ySfKDcrry7/MkM1j
-zjnPEc/q0MbRn9J901vUONUV1fDWytej2HrZUNok2vXbw9yX3XXeVt834Bbg9OHQ4qjjf+RV5Srl++bK
-55foY+ku6fjqw+uL7FTtHO3l7sLvofCA8V3yOfMW8/D0x/We9nT3Sfgd+O75wvqW+2j8PP0S/ef+vP9n
-//8AAAEcAd8CrgOvBNoGIQeNCQgKnAw4DecPlBFBEu0UlhY1F8oZThrBHCUdXB6HH68g3SIOI0IkcCWi
-JtcoDCk/Km8rnizMLfQvFzA+MVoyczOKNJ41tzbXN/o5Fzo3O1A8ZT15Poc/lECfQaZCqUOpRKdFo0af
-R5lIkkmISoBLekyGTZZOo0+vULtRxFLLU9BU1VXYVttX3ljgWeRa51vsXPRd/F8DYA1hE2ILYvpj6GTW
-ZcVmtmenaJdpiWp9a3NsaW1gblxvWXBWcVZyW3NgdGN1ZnZid1F4QXkyeid7H3wYfRJ+EH8PgA2BCoIF
-gwGD/IT0heuG34fQiL+JrIqai6CMn42ijqGPoJCbkZKSi5N+lHCVYZZQlz6YKpkTmf2a55vNnLOdnZ6G
-n4SggqGAon+je6R3pXGmaadgqFipT6pHqz6sNa0triWvHrAYsRSyD7MFs+y0xbWYtm+3RbgbuPG5yLqi
-u368W706vhu+/7/jwMjBtMKcw4jEeMVmxkrHJsgAyNnJusqay3zMYM1EzivPE8/60OPRyNKu05LUddVX
-1jbXFNfv2MzZwNqy26bclt2G3nTfX+BI4THiGOL7497kveWd5nvnWeg36RTp7+rN667soe2c7pbvjvCG
-8X3ycvNk9Fb1R/Y29yT4EPj++ez62PvF/LX9pf6U/1r//wAAAIMBeAJ6A6IE6AZDB7gJPgrPDGUN/w+Z
-ESsSuhQ/Fa4XIRh3GcIa/xw6HWgelh/JIPwiMCNeJIoltybiKAopMCpNK2gsfC2LLpYvnjChMaAynjOc
-NJ01nzagN504mTmSOog7ezxsPVk+RT8tQBNA9UHXQrpDnUR+RVxGP0cgSA1I/UnsSttLyky3TaROkE96
-UGVRT1I6UyRUEFT9VexW3VfNWL5ZsFqeW4NcXV04XhJe7l/NYK1hj2JyY1hkQGUrZhhnB2f6aO5p5Wre
-a9hs0m3MbsRvunCucaVynnObdJl1m3aed6J4p3mpeqp7qnyrfah+pH+cgI+Bg4Jxg2KEW4VRhkmHPogx
-iSGKD4r6i+OMyo2ujpCPcJBMkSiSApLck7OUipVjlkGXJZgOmPiZ4ZrJm6+clp15nl2fQaAloQmh7qLT
-o7qkoKWJpnOnXqhJqS+qDqrlq7asja1hrjavDK/ksL6xnLJ6s1y0QbUntg+2+bfnuNS5w7q4u6q8jr1p
-vkG/G7/2wNPBscKRw3DEUcUxxhLG8cfQyKvJhcpdyzTMCMzbzarOg89n0FDROtIk0w3T9NTY1brWndd+
-2FzZOdoV2vDbydyh3XreUt8p4AHg2eHK4r3jreSW5X/maOdU6EPpN+o06z7sV+2B7rzwD/GV80L1KPdr
-+h/9cf//AABuZGluAAAAAAAABjYAAKNnAABYMQAATJEAAJ0OAAAmTAAAExwAAFANAABUOQACLhQAAgzM
-AAHMzAADAQAAAgAAAAEACAAVACMAMQBBAFEAYgBzAIYAmQCtAMEA1wDtAQQBHAE1AU8BagGHAaQBwgHi
-AgQCJwJMAnQCnQLOAwIDOQNxA6sD5QQfBF0EmwTbBRsFXQWhBecGLgZ3BsIHDwdgB7IIBgheCLgJEwl1
-CdQKMwqRCvELVQu5DCEMjAz5DWkN3Q5SDssPSA/HEEsQ0hFbEecSdxMIE58UNBTLFVgV5hZ4FwwXoRg5
-GNUZchoSGrUbWRv/HKcdTx35HqUfUR/9IKshWyIKIrwjeyRBJQgl0yaeJ2goNikGKdUqpSt2LEgtGy3r
-LrwvjzBhMTEyAzLXM600ijV0NmQ3UzhEOS46HzsNO/w87D3ePtM/zUDJQcNCyEPMRNdF6Eb8SBZJLEou
-SzlMQU1PTl9PdlCSUa5S01P7VSdWVleLWMdaBFtDXItd1V8cYGJhjmLAY/FlJGZdZ5do1moZa11som3q
-bzJwfXHJcxV0YnWvdvt4R3mXev98jn4tf8eBaIMKhK2GToftiY2LKozFjl+P+5GQkymUvJZNl/GZsJt2
-nTme9aCzomykK6Xip56pXKsgrOmuuLCLsma0SbY5uBq54rurvX6/UcEtwxXFAcbxyO3K8cz+zxDRKtND
-1WbXitmx26Tdlt+N4YrjiOWO553psOvH7eXwC/It9FP2fvii+sr89P//AAAAAgAMABsAKgA6AEsAXABu
-AIEAlACoAL0A0gDoAP8BFwEwAUoBZQGBAZ4BvQHdAf8CIwJJAnICnQLPAwUDPgN4A7MD7wQsBGwErQTv
-BTIFdwW+BgcGUgaeBu0HPweUB+kIQwigCP4JYQnECicKiQrtC1ULvQwpDJkNCg2ADfgOcw7xD3MP+RCC
-EQ4RnRIuEsITWxP0FJAVIhWzFkcW3hd2GBEYsBlRGfUamxtEG+8cmx1KHfkeqx9cIA4gwiF4Ii0i6SO0
-JIUlWSYuJwMn2ii0KY4qaCtDLB8s/C3XLrIvkDBsMUYyIjMBM+I0zDXENr03tTisOaE6mDuOPIM9ej5z
-P3BAcEFvQnRDfkSKRZ1GtEfQSO9J80sBTAtNHE4uT0ZQZVGDUqtT1FUDVjRXaVimWeVbI1xrXbVe+2BE
-YXFio2PWZQlmQ2d+aL1qAWtHbI1t128hcG5xvXMMdFx1rHb8eE15oXsLfJh+MX/FgV+C+4SWhi+HxYlb
-iu6Mf44Oj6CRJpK2lD6VwpdQmPeaq5xjng2fuaFkow6ktqZdqAapr6tfrRKuybCEska0DbXgt665Urr9
-vKO+WMAJwcXDicVNxxfI68rDzKTOhdBv0ljURNY52CraEtvQ3YvfSuEQ4tXkn+Zw6EbqH+v97d7vyPGu
-85X1hPdv+Vb7Q/0w//8AAAAGABAAHQAqADkASQBZAGsAfQCQAKQAuQDPAOYA/gEXATIBTgFrAYoBrAHP
-AfMCGwJGAnMCpALWAwwDRAN9A7cD8wQwBHAEsgT2BTsFgwXNBhkGaQa7BxEHagfHCCcIigjyCVwJyQo3
-CqYLFwuMDAQMfwz+DYEOBw6SDyAPsxBKEOYRhBIkEsgTcRQZFMUVaBYOFrYXYRgOGL8ZchopGuIbnhxb
-HRsd2x6dH18gIiDoIa4ieCNMJC8lFCX8JuMnyiiyKZsqgitqLFEtNy4dLwIv5zDMMbAyljN+NGk1WTZM
-N0A4MzkjOhU7BTv1POU91z7MP8VAwEG7Qr1DwUTLRdxG70gKSSRKNUtNTGRNgU6iT8pQ9lIoU19Um1Xf
-VyZYdlnKWyBcf13gXz9gl2HmYzJkgWXUZytohWnla0Zsqm4Pb3Vw3XJEc651FnZ9d+V5UHrIfFR98X+H
-gSSCv4RahfOHhokZiqeMM429j0eQypJRk9WVU5bWmHWaKZvinZafSaD8oq2kYaYUp8qpg6tBrQiu1LCm
-soC0YbZNuCG53buVvVG/EMDUwqDEcsZEyB/KAcvpzdTPx9G907TVsNeu2a3bd91A3xTg9uLa5LvmmOhw
-6jjr7u2P7xzwlvH/81b0h/Wp9rr3tPil+Xn6Rvr++6f8UPzb/WL96f6I/0T//wAAZGVzYwAAAAAAAAAF
-aU1hYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAAQAAAADG5iTk8AAAAIAAAA0HN2U0UAAAAI
-AAAA0GZpRkkAAAAIAAAA0GRhREsAAAAIAAAA0HpoQ04AAAAIAAAA0GZyRlIAAAAIAAAA0GphSlAAAAAI
-AAAA0GVuVVMAAAAIAAAA0HB0QlIAAAAIAAAA0GVzRVMAAAAIAAAA0HpoVFcAAAAIAAAA0HJ1UlUAAAAI
-AAAA0GtvS1IAAAAIAAAA0GRlREUAAAAIAAAA0G5sTkwAAAAIAAAA0Gl0SVQAAAAIAAAA0ABpAE0AYQBj
-bW1vZAAAAAAAAAYQAACcbAAAAADBtMUAAAAAAAAAAAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFw
-cGxlLCBJbmMuLCAyMDA5AA</bytes>
+																					<bytes key="NS.bytes">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
+gIyBh4J9g3iEaIVVhkKHKYgNiOyJx4qhi3WMSo0ajeeOs4+AkFaRLZIEktuTspSIlV6WMpcHl92Ys5mJ
+mmGbOJwPnOedwZ6cn3igVaE0ohSi9aPVpLiljKZWpyOn8qjAqY2qXKsrq/isx62YrmivOrAKsNqxrLJ9
+s060ILTytcW2lLdjuDO5A7nQupC7TbwIvMS9gr5Avv+/vsB8wT3CAMLCw4XETMUTxdvGpcdxyD3JC8nb
+yq3LgMxTzSXN9M6+z4jQUdEZ0eLSrtN31D/VCtXV1qDXbNg52QfZ1dqk23TcRN0V3eneut+P4GPhNuIN
+4urjwuSV5WXmMeb758nolOlj6jbrDevo7NHtxu7G79jw//JC85n1Cvak+Fz6Rvxl/pL//wAAAEEA5AFx
+AhcC0wO3BLAFxwb3CD0JlQsGDHUN9A99EQASghP+FW4WzxgqGXgatxvmHQYeKB9IIGQhgSKhI8Uk5CYG
+JygoRilvKpMruCzjLg4vNzBkMY4yvjPwNSQ2UzeKOLw56zsIPB09NT5IP1hAbkGDQpZDqkS9Rc9G4Ufy
+SQZKGEspTDpNSU5XT2pQd1GEUpJToVSxVcZW4lgCWSNaQ1thXIFdn16+X99g/2IhY0pkb2WXZsNn9Gki
+alVrjWzGbgNvQ3B+ccRy/HQVdRx2H3cjeCd5KHooeyd8Jn0ifhp/E4AJgPyB7oLeg82EuIWfhoqHbYhT
+iTaKF4r3i9OMq42FjluPM5AMkOaRwJKak3KUUJUtlgyW7JfMmK6Zj5p1m1ucQ50rnhafAp/uoNqhxqKi
+o22kPaUQpeOmtaeMqGCpNaoNquWrvqyarXKuS68lr/+w2bGwsoqzY7Q4tQy14La0t4i4Xrkzuga62Lus
+vH+9U74lvve/ysCdwW7CQMMUw+fEucWNxmHHNcgKyN/JtcqNy2TMP80kzhPPA8/y0N3RyNK005zUg9Vq
+1lLXOdgf2QfZ79rY28Lcr92b3ovffeBv4WXiW+NS5EvlRuZE50HoP+lD6krrUuxc7Wrueu+P8KjxwPLa
+8/f1GvY891/4g/mr+tL79/0e/j//Qf//AAAAGwBeAMMBNgGuAj4C5AOaBGMFPgYqBxwIGQkaCiILJAws
+DSsOJA8SD/sQ2hGuEnYTOBP5FLUVchYwFu8XrxhuGS4Z8BqzG3YcOx0BHcwelh9hIC8g+yHMIp8jciRF
+JR4l8ybBJ4QoPij6KbQqbisrK+gspi1mLiYu5y+oMGoxMTH1MrozgDRGNQs11DabN2E4KDjwObg6fztG
+PBA82j2kPm4/N0ABQMxBl0JjQzBEAETORZ1Gb0dESBRI6Em9SpRLa0xETRtN9E7JT5VQXFEjUexStlOC
+VFFVHlXwVsJXllhvWUZaIVr/W99cwF2hXoNfaWBMYTViG2MBY+hkymWoZoZnYWhAaR9p/2rga8FsoW2G
+bmtvT3A3cR5yBnLuc9d0wnWsdph3hHhxeV96SXsxfAF8xH2DfkV/A3/AgH+BOIHygqyDZ4QihN2FmIZT
+hw+HzYiMiUqKC4rOi5CMUo0XjdyOoY9akBOQy5GEkkGTAJPBlISVSZYSlt+Xrph/mVmaM5sQm/Cc1J26
+nqOfj6B9oW+iYaNOpDKlEKXqpsWnoah+qV+qP6sgrAOs6a3OrrOvnrCHsXCyW7NFtDC1G7YGtvC33LjF
+ua66nrvAvOS+Ab8ZwDPBU8J5w6jE4sYqx3/I7MpwzAfNv8+k0bTT99Z52VrcnuCT5U7rpPVK//8AAG5k
+aW4AAAAAAAAGNgAAmQIAAFbIAABVBAAAkbAAACeRAAAVYAAAUA0AAFQ5AAIKPQAB+uEAASZmAAMBAAAC
+AAAAEwAsAEUAXwB4AJEAqwDFAN8A+QEUATABTAFqAYcBpgHGAecCCgIuAlQCfAKnAtMDAwM1A2oDpQPk
+BCQEZwSsBPMFOwWFBc8GHAZqBroHDAddB7AIBQhbCLAJCAlhCboKFApxCs0LKguHC+YMRwymDQkNbA3V
+DkQOtQ8mD5wQFBCLEQQRfxH9EnoS+hN7E/8UhRUKFZEWGxalFzIXwhhTGOIZdhoLGqIbOhvTHGwdBB2c
+HjEexx9gH/oglyE0IdQidCMUI7YkWiT9JZ0mQibnJ4soLijPKXUqGSq7K14sACyiLUQt5i6LLywvzjB6
+MUQyHTL5M9c0szWYNns3ZzhROUM6PTszPDY9Pz5KP2BAe0GiQsxEAkU5Rn5HyEkSSlFLkEzUThlPYlCt
+Uf5TT1ShVfdXSlijWf1bVVytXgZfX2C3Yg9jbGTDZjdnwWlCashsU23ab2lw+HKFdBV1pXc8eNF6anwD
+faB/O4DhgomEMoXgh7GJj4tzjVKPM5EUkvuU2pa9mJ6aeJxXnjCgCKHfo7SlhqdWqSmrB6zyruOw2LLS
+tMS2wri/urm8uL61wLLCr8StxqrIqcqhzKPOnNCe0p3UitaH2JLarNzS3u/hGeMz5ULnR+kw6v/su+5b
+7+HxS/Km8/D1KfZK92L4bvlo+lf7NvwQ/N79pP6X//8AAAAMACMAPABUAG4AhwChALsA1gDxAQwBKQFG
+AWQBggGiAcMB5QIJAi4CVQJ/AqsC2QMJAz0DdAOwA/AEMQR0BLoFAgVLBZUF4AYvBn4GzwcjB3UHyggi
+CHkI0QkrCYcJ4wpCCqELAAthC8IMJwyKDPANWA3DDjgOsA8oD6QQIxChESERpBIoEq4TNhPAFEwU2hVo
+FfkWjBchF7kYUxjrGYkaKBrJG2scDhyxHVId8R6QHzEf1CB5IR8hxyJwIxojxSRyJR4lyCZ2JyQn0ih9
+KSop2iqHKzMr4CyMLTkt5S6WL0Ev8DCtMYEyXjM+NB81ATXpNtE3vjirOaA6mDuQPJE9kz6bP6VAtUHO
+QuREBUUkRkxHd0imSeNLHkxiTaNO5lArUXFSvVQBVUpWkVfaWSJablu0XPxeRF+MYNNiGWNlZKxmEmeZ
+aRRqkGwRbYxvDnCOcgxzjHUJdo94FHmbeyN8tH5Af9OBcIMQhLKGVYf3iaCLT4z8jq2QYJIak9GVjJdO
+mQyazJyTnlagHKHko6yldKc6qQWqwqxjrgKvp7FSswK0r7ZpuCW54bufvWS/JMDowqrEbsYrx+/JqMtj
+zR3O0tCL0kDT99Wm11fZDNq53GDeBd+t4U/i7eSK5iDnsulK6t/scO3774jxFvKl9DD1uPdH+Nb6ZPv9
+/Y7//wAAAB0ARABqAJEAuADfAQgBMgFeAYsBvAHuAiQCXgKeAuIDLAN/A9wEPgSmBRIFgQXzBmoG4wdf
+B94IYAjhCWcJ7gp5CwMLjwwgDK8NQw3hDpIPRQ/+ELgRdBIzEvQTtxR+FUMWDRbYF6gYehlMGiUa/xvb
+HLodnx6CH2ggUSE+Ii0jHSQRJQUl+CbxJ+ko3yndKtcr1CzRLc8u0i/TMOQyBDMnNEg1azaLN684zjny
+Ow48Lz1NPmk/hUCiQcJC3UP+RRpGPUdgSIVJuErtTClNYU6aT9VREFJRU4xUyVYJV0RYhVnGWwhcSV2M
+XtBgFWFaYqBj7mVCZtFocmoPa7xtZm8fcNlylHRSdhR32Xmce1x9In7egKGCZIQkheaHx4mwi5uNe49Y
+kTCTBpTOlpWYVpoHm7qdZ58OoLKiUqPvpYinHqi0qlmsFa3er6ixdLM9tQC2ybiPulC8Er3Yv5TBV8MY
+xNrGnshlyijL9M27z4vRXtMi1JTWCdeJ2RPantwk3aPfG+CL4fHjTOSd5ePnGOhA6WLqe+uD7IXtcu5d
+7zfwD/DX8Z/yV/MO87v0WPT29Yv2F/aj9yj3nPgP+IP48flS+bT6Fvp4+sr7E/tc+6X77vw3/Hb8pvzV
+/QX9NP1k/ZP9w/3z/iL+T/56/qX+0P77/yf/Uv99/6j/1P//AABkZXNjAAAAAAAAAApDb2xvciBMQ0QA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAbWx1YwAAAAAAAAASAAAADG5iTk8AAAASAAAA6HB0UFQAAAAWAAAA+nN2
+U0UAAAAQAAABEGZpRkkAAAAQAAABIGRhREsAAAAcAAABMHpoQ04AAAAMAAABTGZyRlIAAAASAAABWGph
+SlAAAAAOAAABamVuVVMAAAASAAABeHBsUEwAAAASAAABinB0QlIAAAAYAAABnGVzRVMAAAASAAABtHpo
+VFcAAAAOAAABxnJ1UlUAAAAkAAAB1GtvS1IAAAAMAAAB+GRlREUAAAAQAAACBG5sTkwAAAAWAAACFGl0
+SVQAAAAUAAACKgBGAGEAcgBnAGUALQBMAEMARABMAEMARAAgAGEAIABDAG8AcgBlAHMARgDkAHIAZwAt
+AEwAQwBEAFYA5AByAGkALQBMAEMARABMAEMARAAtAGYAYQByAHYAZQBzAGsA5gByAG1faYJyACAATABD
+AEQAyQBjAHIAYQBuACAATABDAEQwqzDpMPwAIABMAEMARABDAG8AbABvAHIAIABMAEMARABLAG8AbABv
+AHIAIABMAEMARABMAEMARAAgAEMAbwBsAG8AcgBpAGQAbwBMAEMARAAgAGMAbwBsAG8Acl9pgnJtsmZ2
+mG95OlZoBCYEMgQ1BEIEPQQ+BDkAIAQWBBoALQQ0BDgEQQQ/BDsENQQ5zuy37AAgAEwAQwBEAEYAYQBy
+AGIALQBMAEMARABLAGwAZQB1AHIAZQBuAC0ATABDAEQATABDAEQAIABjAG8AbABvAHIAaQAAbW1vZAAA
+AAAAAAYQAACcgQAAAADBvf+AAAAAAAAAAAAAAAAAAAAAAHRleHQAAAAAQ29weXJpZ2h0IEFwcGxlLCBJ
+bmMuLCAyMDA5AA</bytes>
 																				</object>
 																				<string key="NSCacheWindowColorSpace">NSCalibratedRGBColorSpace</string>
 																				<int key="NSCacheWindowBPS">8</int>
 														</object>
 														<object class="NSTableColumn" id="919415126">
 															<string key="NSIdentifier">author</string>
-															<double key="NSWidth">5.000000e+01</double>
+															<double key="NSWidth">5.800000e+01</double>
 															<double key="NSMinWidth">4.500000e+01</double>
 															<double key="NSMaxWidth">2.000000e+02</double>
 															<object class="NSTableHeaderCell" key="NSHeaderCell">
 														</object>
 														<object class="NSTableColumn" id="665841923">
 															<string key="NSIdentifier">comment</string>
-															<double key="NSWidth">3.120000e+02</double>
+															<double key="NSWidth">3.040000e+02</double>
 															<double key="NSMinWidth">4.000000e+01</double>
 															<double key="NSMaxWidth">1.000000e+03</double>
 															<object class="NSTableHeaderCell" key="NSHeaderCell">
 											</object>
 											<string key="NSFrame">{{1, 17}, {571, 184}}</string>
 											<reference key="NSSuperview" ref="214279069"/>
-											<reference key="NSWindow"/>
 											<reference key="NSNextKeyView" ref="392325734"/>
 											<reference key="NSDocView" ref="392325734"/>
 											<reference key="NSBGColor" ref="131218211"/>
 											<int key="NSvFlags">256</int>
 											<string key="NSFrame">{{572, 17}, {15, 184}}</string>
 											<reference key="NSSuperview" ref="214279069"/>
-											<reference key="NSWindow"/>
 											<reference key="NSTarget" ref="214279069"/>
 											<string key="NSAction">_doScroller:</string>
 											<double key="NSCurValue">3.700000e+01</double>
 											<int key="NSvFlags">256</int>
 											<string key="NSFrame">{{-100, -100}, {180, 15}}</string>
 											<reference key="NSSuperview" ref="214279069"/>
-											<reference key="NSWindow"/>
 											<int key="NSsFlags">1</int>
 											<reference key="NSTarget" ref="214279069"/>
 											<string key="NSAction">_doScroller:</string>
 											</object>
 											<string key="NSFrame">{{1, 0}, {571, 17}}</string>
 											<reference key="NSSuperview" ref="214279069"/>
-											<reference key="NSWindow"/>
 											<reference key="NSNextKeyView" ref="288602249"/>
 											<reference key="NSDocView" ref="288602249"/>
 											<reference key="NSBGColor" ref="131218211"/>
 									</object>
 									<string key="NSFrameSize">{588, 202}</string>
 									<reference key="NSSuperview" ref="333363212"/>
-									<reference key="NSWindow"/>
 									<reference key="NSNextKeyView" ref="61754055"/>
 									<int key="NSsFlags">18</int>
 									<reference key="NSVScroller" ref="746151416"/>
 														<object class="NSOutlineView" id="408726427">
 															<reference key="NSNextResponder" ref="305294895"/>
 															<int key="NSvFlags">256</int>
-															<string key="NSFrameSize">{308, 247}</string>
+															<string key="NSFrameSize">{281, 262}</string>
 															<reference key="NSSuperview" ref="305294895"/>
-															<reference key="NSWindow"/>
 															<bool key="NSEnabled">YES</bool>
 															<object class="NSTableHeaderView" key="NSHeaderView" id="435744945">
 																<reference key="NSNextResponder" ref="960155502"/>
 																<int key="NSvFlags">256</int>
-																<string key="NSFrameSize">{308, 17}</string>
+																<string key="NSFrameSize">{281, 17}</string>
 																<reference key="NSSuperview" ref="960155502"/>
-																<reference key="NSWindow"/>
 																<reference key="NSTableView" ref="408726427"/>
 															</object>
 															<object class="_NSCornerView" key="NSCornerView" id="674521879">
 																<int key="NSvFlags">-2147483392</int>
 																<string key="NSFrame">{{-26, 0}, {16, 17}}</string>
 																<reference key="NSSuperview" ref="977457134"/>
-																<reference key="NSWindow"/>
 															</object>
 															<object class="NSMutableArray" key="NSTableColumns">
 																<bool key="EncodedWithXMLCoder">YES</bool>
 																</object>
 																<object class="NSTableColumn" id="157704806">
 																	<string key="NSIdentifier">name</string>
-																	<double key="NSWidth">2.510000e+02</double>
+																	<double key="NSWidth">2.240000e+02</double>
 																	<double key="NSMinWidth">4.000000e+01</double>
 																	<double key="NSMaxWidth">1.000000e+03</double>
 																	<object class="NSTableHeaderCell" key="NSHeaderCell">
 															<reference key="NSBackgroundColor" ref="1027376210"/>
 															<reference key="NSGridColor" ref="982455738"/>
 															<double key="NSRowHeight">1.600000e+01</double>
-															<int key="NSTvFlags">-631242752</int>
+															<int key="NSTvFlags">-633339904</int>
 															<object class="NSArray" key="NSSortDescriptors">
 																<bool key="EncodedWithXMLCoder">YES</bool>
 																<reference ref="991949078"/>
 															<reference key="NSOutlineViewOutlineTableColumnKey" ref="157704806"/>
 														</object>
 													</object>
-													<string key="NSFrame">{{0, 17}, {281, 247}}</string>
+													<string key="NSFrame">{{0, 17}, {281, 262}}</string>
 													<reference key="NSSuperview" ref="977457134"/>
-													<reference key="NSWindow"/>
 													<reference key="NSNextKeyView" ref="408726427"/>
 													<reference key="NSDocView" ref="408726427"/>
 													<reference key="NSBGColor" ref="131218211"/>
 													<int key="NSvFlags">-2147483392</int>
 													<string key="NSFrame">{{266, 17}, {15, 247}}</string>
 													<reference key="NSSuperview" ref="977457134"/>
-													<reference key="NSWindow"/>
 													<reference key="NSTarget" ref="977457134"/>
 													<string key="NSAction">_doScroller:</string>
 													<double key="NSPercent">9.427481e-01</double>
 												</object>
 												<object class="NSScroller" id="521395639">
 													<reference key="NSNextResponder" ref="977457134"/>
-													<int key="NSvFlags">256</int>
+													<int key="NSvFlags">-2147483392</int>
 													<string key="NSFrame">{{0, 264}, {281, 15}}</string>
 													<reference key="NSSuperview" ref="977457134"/>
-													<reference key="NSWindow"/>
-													<bool key="NSEnabled">YES</bool>
 													<int key="NSsFlags">1</int>
 													<reference key="NSTarget" ref="977457134"/>
 													<string key="NSAction">_doScroller:</string>
 													</object>
 													<string key="NSFrameSize">{281, 17}</string>
 													<reference key="NSSuperview" ref="977457134"/>
-													<reference key="NSWindow"/>
 													<reference key="NSNextKeyView" ref="435744945"/>
 													<reference key="NSDocView" ref="435744945"/>
 													<reference key="NSBGColor" ref="131218211"/>
 											</object>
 											<string key="NSFrameSize">{281, 279}</string>
 											<reference key="NSSuperview" ref="599257509"/>
-											<reference key="NSWindow"/>
 											<reference key="NSNextKeyView" ref="305294895"/>
-											<int key="NSsFlags">688</int>
+											<int key="NSsFlags">560</int>
 											<reference key="NSVScroller" ref="864508780"/>
 											<reference key="NSHScroller" ref="521395639"/>
 											<reference key="NSContentView" ref="305294895"/>
 															<int key="NSvFlags">2322</int>
 															<string key="NSFrameSize">{302, 12}</string>
 															<reference key="NSSuperview" ref="378280175"/>
-															<reference key="NSWindow"/>
 															<object class="NSTextContainer" key="NSTextContainer" id="178117438">
 																<object class="NSLayoutManager" key="NSLayoutManager">
 																	<object class="NSTextStorage" key="NSTextStorage">
 													</object>
 													<string key="NSFrame">{{1, 1}, {296, 277}}</string>
 													<reference key="NSSuperview" ref="554197517"/>
-													<reference key="NSWindow"/>
 													<reference key="NSNextKeyView" ref="1057217485"/>
 													<reference key="NSDocView" ref="1057217485"/>
 													<reference key="NSBGColor" ref="131218211"/>
 													<int key="NSvFlags">-2147483392</int>
 													<string key="NSFrame">{{281, 1}, {15, 276}}</string>
 													<reference key="NSSuperview" ref="554197517"/>
-													<reference key="NSWindow"/>
 													<reference key="NSTarget" ref="554197517"/>
 													<string key="NSAction">_doScroller:</string>
 													<double key="NSPercent">8.706625e-01</double>
 													<int key="NSvFlags">256</int>
 													<string key="NSFrame">{{-100, -100}, {87, 18}}</string>
 													<reference key="NSSuperview" ref="554197517"/>
-													<reference key="NSWindow"/>
 													<bool key="NSEnabled">YES</bool>
 													<int key="NSsFlags">1</int>
 													<reference key="NSTarget" ref="554197517"/>
 											</object>
 											<string key="NSFrame">{{290, 0}, {298, 279}}</string>
 											<reference key="NSSuperview" ref="599257509"/>
-											<reference key="NSWindow"/>
 											<reference key="NSNextKeyView" ref="378280175"/>
 											<int key="NSsFlags">658</int>
 											<reference key="NSVScroller" ref="31961279"/>
 									</object>
 									<string key="NSFrame">{{0, 211}, {588, 279}}</string>
 									<reference key="NSSuperview" ref="333363212"/>
-									<reference key="NSWindow"/>
 									<bool key="NSIsVertical">YES</bool>
 								</object>
 							</object>
 							<string key="NSFrame">{{-1, -1}, {588, 490}}</string>
 							<reference key="NSSuperview" ref="118353878"/>
-							<reference key="NSWindow"/>
 						</object>
 					</object>
 					<string key="NSFrameSize">{586, 488}</string>
 					<reference key="NSSuperview"/>
-					<reference key="NSWindow"/>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
 				<nil key="NSViewClass"/>
 				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
 				<object class="NSView" key="NSWindowView" id="601455988">
-					<reference key="NSNextResponder"/>
+					<nil key="NSNextResponder"/>
 					<int key="NSvFlags">256</int>
 					<object class="NSMutableArray" key="NSSubviews">
 						<bool key="EncodedWithXMLCoder">YES</bool>
 										<object class="NSTextView" id="925909873">
 											<reference key="NSNextResponder" ref="592092130"/>
 											<int key="NSvFlags">2322</int>
-											<object class="NSMutableSet" key="NSDragTypes">
-												<bool key="EncodedWithXMLCoder">YES</bool>
-												<object class="NSMutableArray" key="set.sortedObjects">
-													<bool key="EncodedWithXMLCoder">YES</bool>
-													<string>Apple HTML pasteboard type</string>
-													<string>Apple PDF pasteboard type</string>
-													<string>Apple PICT pasteboard type</string>
-													<string>Apple PNG pasteboard type</string>
-													<string>Apple URL pasteboard type</string>
-													<string>CorePasteboardFlavorType 0x6D6F6F76</string>
-													<string>CorePasteboardFlavorType 0x75726C20</string>
-													<string>NSColor pasteboard type</string>
-													<string>NSFilenamesPboardType</string>
-													<string>NSStringPboardType</string>
-													<string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>
-													<string>NeXT RTFD pasteboard type</string>
-													<string>NeXT Rich Text Format v1.0 pasteboard type</string>
-													<string>NeXT TIFF v4.0 pasteboard type</string>
-													<string>NeXT font pasteboard type</string>
-													<string>NeXT ruler pasteboard type</string>
-													<string>WebURLsWithTitlesPboardType</string>
-												</object>
-											</object>
 											<string key="NSFrameSize">{366, 14}</string>
 											<reference key="NSSuperview" ref="592092130"/>
 											<object class="NSTextContainer" key="NSTextContainer" id="945498614">
 									</object>
 									<string key="NSFrame">{{1, 1}, {366, 101}}</string>
 									<reference key="NSSuperview" ref="912248093"/>
-									<reference key="NSNextKeyView" ref="925909873"/>
 									<reference key="NSDocView" ref="925909873"/>
 									<reference key="NSBGColor" ref="1027376210"/>
 									<reference key="NSCursor" ref="770217247"/>
 							</object>
 							<string key="NSFrame">{{20, 60}, {368, 103}}</string>
 							<reference key="NSSuperview" ref="601455988"/>
-							<reference key="NSNextKeyView" ref="592092130"/>
 							<int key="NSsFlags">530</int>
 							<reference key="NSVScroller" ref="263886132"/>
 							<reference key="NSHScroller" ref="104809913"/>
 						</object>
 					</object>
 					<string key="NSFrameSize">{408, 208}</string>
-					<reference key="NSSuperview"/>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
 				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
 				<string key="NSWindowContentMinSize">{300, 124}</string>
 				<object class="NSView" key="NSWindowView" id="1008550395">
-					<reference key="NSNextResponder"/>
+					<nil key="NSNextResponder"/>
 					<int key="NSvFlags">256</int>
 					<object class="NSMutableArray" key="NSSubviews">
 						<bool key="EncodedWithXMLCoder">YES</bool>
 						</object>
 					</object>
 					<string key="NSFrameSize">{478, 210}</string>
-					<reference key="NSSuperview"/>
 				</object>
 				<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
 				<string key="NSMinSize">{300, 146}</string>
 					<string>300280.IBPluginDependency</string>
 					<string>300282.IBPluginDependency</string>
 					<string>300284.IBPluginDependency</string>
+					<string>300291.IBPluginDependency</string>
 					<string>300300.IBPluginDependency</string>
 					<string>6.IBPluginDependency</string>
 					<string>6.ImportedFromIB2</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<reference ref="9"/>
-					<string>{{428, 182}, {586, 488}}</string>
-					<string>{{428, 182}, {586, 488}}</string>
+					<string>{{208, 182}, {586, 488}}</string>
+					<string>{{208, 182}, {586, 488}}</string>
 					<reference ref="9"/>
 					<string>{{166, 135}, {586, 488}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<reference ref="9"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<reference ref="9"/>
 					<string key="className">NSWindow</string>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">../../../Code/cocoa/MYUtilities/MYWindowUtils.h</string>
+						<string key="minorKey">../MYUtilities/MYWindowUtils.h</string>
 					</object>
 				</object>
 				<object class="IBPartialClassDescription">
Add a comment to this file

English.lproj/RevisionDescriptionTemplate.rtf

Binary file added.

+{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf430
+{\fonttbl\f0\fnil\fcharset0 LucidaGrande;\f1\fswiss\fcharset0 ArialNarrow;}
+{\colortbl;\red255\green255\blue255;}
+{\info
+{\author Jens Alfke}}\margl1440\margr1440\vieww9720\viewh11580\viewkind0
+\pard\tqr\tx760\tx960\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li1280\fi-1280\ql\qnatural\pardirnatural
+
+\f0\fs22 \cf0 	
+\b #LOCAL:
+\b0 	
+\f1 IDENTIFIER
+\f0 \
+
+\b 	Date:
+\b0 	DATE\
+
+\b 	By:
+\b0 	AUTHOR\
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
+\cf0 \
+\pard\tqr\tx620\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
+
+\fs24 \cf0 DESCRIPTION}

Murky.xcodeproj/project.pbxproj

 		277C51C20C56709800E60690 /* ImageAndTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 277C51C10C56709800E60690 /* ImageAndTextCell.m */; };
 		277C52120C56761000E60690 /* HgOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 277C52110C56761000E60690 /* HgOperation.m */; };
 		277D16B90C989715001D8600 /* libicucore.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 277D16B80C989715001D8600 /* libicucore.dylib */; };
+		279089880FBFD9CC00CEA97E /* RevisionDescriptionTemplate.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 279089860FBFD9CC00CEA97E /* RevisionDescriptionTemplate.rtf */; };
 		27A6B63F0CAC254500482D5D /* RepoController_Actions.m in Sources */ = {isa = PBXBuildFile; fileRef = 27A6B63E0CAC254500482D5D /* RepoController_Actions.m */; };
 		27AA81BC0FADF65500D4FCBB /* CollectionUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 27AA81B50FADF65500D4FCBB /* CollectionUtils.m */; };
 		27AA81BD0FADF65500D4FCBB /* ExceptionUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 27AA81B70FADF65500D4FCBB /* ExceptionUtils.m */; };
 		277C52100C56761000E60690 /* HgOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HgOperation.h; sourceTree = "<group>"; };
 		277C52110C56761000E60690 /* HgOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HgOperation.m; sourceTree = "<group>"; };
 		277D16B80C989715001D8600 /* libicucore.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libicucore.dylib; path = /usr/lib/libicucore.dylib; sourceTree = "<absolute>"; };
+		279089870FBFD9CC00CEA97E /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/RevisionDescriptionTemplate.rtf; sourceTree = SOURCE_ROOT; };
 		27A6B63E0CAC254500482D5D /* RepoController_Actions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RepoController_Actions.m; sourceTree = "<group>"; };
 		27AA81A50FADF53100D4FCBB /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = "<group>"; };
 		27AA81B40FADF65500D4FCBB /* CollectionUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CollectionUtils.h; sourceTree = "<group>"; };
 				27FEB4840FBB209D00290049 /* InfoPlist.strings */,
 				27FEB4630FBB200600290049 /* Icons */,
 				270E512A0C56AED10069C9C6 /* xmlstyle */,
+				279089860FBFD9CC00CEA97E /* RevisionDescriptionTemplate.rtf */,
 				27C656FB0FAE0DC100CFB909 /* Credits.rtf */,
 				27C6572C0FAE743800CFB909 /* TextEditors.plist */,
 			);
 				D095A50E0FBC329500512681 /* status_nottracked.png in Resources */,
 				D095A5120FBC363100512681 /* status_removed.png in Resources */,
 				D095A5170FBC376E00512681 /* status_null.png in Resources */,
+				279089880FBFD9CC00CEA97E /* RevisionDescriptionTemplate.rtf in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXVariantGroup section */
+		279089860FBFD9CC00CEA97E /* RevisionDescriptionTemplate.rtf */ = {
+			isa = PBXVariantGroup;
+			children = (
+				279089870FBFD9CC00CEA97E /* English */,
+			);
+			name = RevisionDescriptionTemplate.rtf;
+			sourceTree = "<group>";
+		};
 		27C656FB0FAE0DC100CFB909 /* Credits.rtf */ = {
 			isa = PBXVariantGroup;
 			children = (

Source/HgRepository.h

 
 @property (readonly) NSString *absolutePath;
 @property (readonly) NSURL *URL;
-@property (readonly) NSString *webName, *webDescription;
+@property (readonly) NSString *name, *webName, *webDescription;
 
 @property (readonly,copy) NSArray* revisions;
 @property (readonly) HgRevision *currentRevision, *tipRevision;

Source/HgRepository.m

 }    
 
 
-/** Updates the status of the given paths, and updates the presence of the uncommitted revision in _revisions. */
+/** Updates the status of the given paths. */
 - (BOOL) _checkWorkingTreePaths: (NSSet*)paths error: (NSError**)outError
 {
-    if( ! [_uncommittedRevision updatePaths: paths error: outError] )
-        return NO;
-    BOOL hasChanges = _uncommittedRevision.root.isUncommitted;
-    if( hasChanges != self.isUncommitted ) {
-        // Add or remove the uncommitted revision according to the working tree's status:
-        NSMutableArray *nuRevisions = [_revisions mutableCopy];
-        if( hasChanges )
-            [nuRevisions addObject: _uncommittedRevision];
-        else
-            [nuRevisions removeObject: _uncommittedRevision];
-        self.revisions = nuRevisions;
-    }
-    return YES;
+    return [_uncommittedRevision updatePaths: paths error: outError];
 }
 
 
         
         // Add the new revisions, but before the uncommitted one if any:
         NSMutableArray *nuRevisions = [_revisions mutableCopy];
-        BOOL unc = [nuRevisions containsObject: _uncommittedRevision];
-        if( unc )
-            [nuRevisions removeObject: _uncommittedRevision];
+        [nuRevisions removeObject: _uncommittedRevision];
         [nuRevisions addObjectsFromArray: op.revisions];
-        if( unc )
-            [nuRevisions addObject: _uncommittedRevision];
+        [nuRevisions addObject: _uncommittedRevision];
         
         _currentRevision = [nuRevisions objectAtIndex: curRevNo];
         _uncommittedRevision.parent = _currentRevision;
 
 - (HgUncommittedRevision*) modifiedRevision
 {
-    HgRevision *r = [self.revisions lastObject];
-    if( r.isUncommitted )
-        return (HgUncommittedRevision*)r;
+    if (_uncommittedRevision.root.isUncommitted)
+        return _uncommittedRevision;
     else
         return nil;
 }
 
 - (BOOL) isUncommitted
 {
-    return [self.revisions.lastObject isUncommitted];
+    return _uncommittedRevision.root.isUncommitted;
 }
 
 - (HgRevision*) revisionWithID: (HgRevisionID)revID

Source/HgRevision.h

 @property (readonly,nonatomic)  NSString *identifierString, *localString;
 @property (copy,nonatomic)      NSString *comment, *author, *email;
 @property (readonly,copy,nonatomic)  NSString *shortComment, *formattedDescription;
+@property (readonly,copy,nonatomic)  NSAttributedString *richFormattedDescription;
 @property (copy,nonatomic)      NSDate *date;
 @property (retain,nonatomic)    HgRevision* parent, *parent2;
 @property (readonly)            NSArray *parents;

Source/HgRevision.m

 }
 
 
-- (NSString*) formattedDescription
+- (NSString*) formattedDate
 {
     static NSDateFormatter *sFmt;
     if( ! sFmt ) {
         sFmt.dateStyle = NSDateFormatterLongStyle;
         sFmt.timeStyle = NSDateFormatterLongStyle;
     }
+    return [sFmt stringFromDate: self.date];
+}
+
+
+- (NSString*) formattedDescription
+{
     NSMutableString *desc = [NSMutableString stringWithFormat: @"#%i: [%@]\n%@\n%@ <%@>\n",
                              _localNumber,
                              self.identifierString,
-                             [sFmt stringFromDate: self.date],
+                             self.formattedDate,
                              self.author,self.email];
     [desc appendString: @"____________________\n\n"];
     if( _comment.length > 0 )
     return desc;
 }
 
+static NSRange replace(NSMutableAttributedString *desc, NSString *src, NSString *dst) {
+    NSRange r = [desc.string rangeOfString: src];
+    if (r.length) {
+        [desc replaceCharactersInRange: r withString: (dst ?: @"")];
+        r.length = dst.length;
+    }
+    return r;
+}
+
+static void replaceAndLink(NSMutableAttributedString *desc, NSString *src, NSString *dst, 
+                           NSURL *url, NSString *tooltip) {
+    NSRange r = replace(desc,src,dst);
+    if (r.length > 0) {
+        if (url) 
+            [desc addAttribute: NSLinkAttributeName value: url range: r];
+        if (tooltip)
+            [desc addAttribute: NSToolTipAttributeName value: tooltip range: r];
+    }
+}
+
+- (NSAttributedString*) richFormattedDescription
+{
+    static NSAttributedString *sTemplate;
+    if (!sTemplate) {
+        NSString *templatePath = [[NSBundle bundleForClass: [self class]]
+                                  pathForResource: @"RevisionDescriptionTemplate" ofType: @"rtf"];
+        Assert(templatePath);
+        sTemplate = [[NSAttributedString alloc] initWithPath: templatePath documentAttributes: NULL];
+        Assert(sTemplate);
+    }
+    
+    NSURL *email = nil;
+    if (self.email) {
+        NSString *name = [self.repository.name stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
+        email = [NSURL URLWithString: $sprintf(@"mailto:%@?subject=Re:%%20%@",
+                 self.email, name)];
+    }
+    
+    NSMutableAttributedString *desc = [sTemplate mutableCopy];
+    replace(desc, @"DESCRIPTION",(_comment ?: @""));
+    replaceAndLink(desc, @"AUTHOR",     self.author, email, self.email);
+    replace(desc, @"DATE",       self.formattedDate);
+    replace(desc, @"IDENTIFIER", self.identifierString);
+    replace(desc, @"LOCAL",      _localNumber !=NSNotFound ?$sprintf(@"%i",_localNumber): nil);
+    return desc;
+}
+
 
 - (void) dumpTo: (NSMutableString*)dump {
     static NSDateFormatter *sFmt;

Source/HgUncommittedRevision.m

 
 - (NSString*) comment
 {
-    return _comment.length ?_comment :@"--locally modified--";
+    if (_comment.length)
+        return _comment;
+    else if (_root.isUncommitted)
+        return @"--locally modified--";
+    else
+        return @"(no changes)";
 }
 
 - (void) setComment: (NSString*)str
 - (NSString*) formattedDescription                  {return _comment;}
 - (void) setFormattedDescription: (NSString*)str    {self.comment = str;}
 
+- (NSAttributedString*) richFormattedDescription {
+    if (_comment)
+        return [[NSAttributedString alloc] initWithString: _comment];
+    else
+        return nil;
+}
+
 - (NSData*) getFileContents: (HgFile*)file error: (NSError**)outError
 {
     return [NSData dataWithContentsOfFile: self.absolutePath
 #pragma mark -
 #pragma mark FILE OPERATIONS:
 
+
 - (NSString*) diffFile: (HgFile*)file withRevisionNumber: (int)otherRev error: (NSError**)outError
 {
     if( otherRev==_localNumber )

Source/RepoController.m

 @interface RepoController ()
 - (void) _updateWindowTitle;
 - (void) _expandPaths;
+- (void) _updateInfoView;
 @end
 
 
     NSString *uncommittedComments = [_settings objectForKey: @"UncommittedComments"];
     if( uncommittedComments ) {
         HgUncommittedRevision *last = _repo.modifiedRevision;
-        if( last )
+        if( last ) {
             last.formattedDescription = uncommittedComments;
+            [self _updateInfoView];
+        }
     }
     
     [self tableView: _revisionTable didClickTableColumn: nil];  // set up graph column
 - (void) saveSettings
 {
     if( _settingsChanged ) {
-        Log(@"RepoController: Saving settings");
+        LogTo(Settings,@"Saving settings");
         [_repo ignoreNextFileChanges];
         [_settings writeToFile: [_repo.absolutePath stringByAppendingPathComponent: kSettingsFilePath]
                     atomically: YES];
 {
     id oldValue = [_settings objectForKey: setting];
     if( value!=oldValue && ![value isEqual: oldValue] ) {
-        Log(@"Setting: %@ = %@",setting,value);
+        LogTo(Settings,@"%@ = %@",setting,value);
         if( value )
             [_settings setObject: value forKey: setting];
         else
 - (void) _updateInfoView
 {
     HgRevision *revision = self.selectedRevision;
-    NSString *text = revision.formattedDescription ?: @"";
-    _infoView.string = text;
+    NSAttributedString *text = revision.richFormattedDescription;
+    if (text)
+        [_infoView.textStorage setAttributedString: text];
+    else
+        [_infoView setString: @""];
     [_infoView setEditable: revision.isUncommitted];
     _infoView.drawsBackground = revision.isUncommitted;
+    [_infoView didChangeText];
     [_infoView setNeedsDisplay: YES];
 }
 
 
 - (void) _revisionSelectionChanged: (NSTreeController*)controller change: (NSDictionary*)change
 {
-    //Log(@"Revision Selection = %@",self.selectedRevision);
+    Log(@"Revision Selection = %@",self.selectedRevision);
     [self _updateInfoView];
     [self _updateWindowTitle];
 }
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.