Update Monday, 6th of April, Anno Domini MMIX, at the hour of the Rat
[git/dscho.git] / blog.rss
blobae8b5a3a300a81424748779ff565b01c14b02939
1 <?xml version="1.0" encoding="utf-8"?>
2 <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
3 <channel>
4 <title>Dscho's Git log</title>
5 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html</link>
6 <atom:link href="http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=blog.rss" rel="self" type="application/rss+xml"/>
7 <description>A few stories told by Dscho</description>
8 <lastBuildDate>Mon, 06 Apr 2009 00:29:32 +0200</lastBuildDate>
9 <language>en-us</language>
10 <item>
11 <title>How to recover from a hackathon</title>
12 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1238970571</link>
13 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1238970571</guid>
14 <pubDate>Mon, 06 Apr 2009 00:29:31 +0200</pubDate>
15 <description><![CDATA[How to recover from a hackathon
16 </p><p>
17 Phew, 2 crazy and fantastic weeks are behind me. But it takes its toll:
18 a weekend I was more offline than online.
19 </p><p>
20 Things that are important now: relax. sleep. take a walk. learn to sleep
21 more than 4 hours a night again. learn to watch a movie without thinking
22 about code. go for a run.
23 </p><p>
24 And after recovering, back to the rebase-i-p branch!]]></description>
25 </item>
26 <item>
27 <title>So, what is missing from my rebase-i-p branch?</title>
28 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1236554268</link>
29 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1236554268</guid>
30 <pubDate>Mon, 09 Mar 2009 00:17:48 +0100</pubDate>
31 <description><![CDATA[So, what is missing from my <i>rebase-i-p</i> branch?
32 </p><p>
33 I regularly use <i>rebase -i -p</i> these days, to update my personal Git
34 tree (which used to be <i>my-next</i>).
35 </p><p>
36 There are a few things missing before I can start assembling a patch
37 series for submission:
38 </p><p>
39 <ul>
40 <li>I need to handle the commit parents which are outside of the rebased
41 ones properly. In other words, when a commit is picked whose parent is
42 not rebased, it needs to be rebased onto $ONTO.
43 <li>The patch which uses patch-id to generate DROPPED directly also tries to
44 consolidate the handling of DROPPED commits by putting them into REWRITTEN
45 instead of DROPPED, but that breaks the tests. So, this patch needs to be
46 split.
47 <li>I want to introduce one more command, <i>rephrase</i>, which allows you to
48 modify the commit message, and nothing more, and <i>halt</i>, which does the
49 same as <i>edit</i> without <i>pick</i>. Then there needs to be a new test script
50 for those commands, and this will be an early patch series.
51 <li>Time. I need time, desperately. If my day job was not as exciting as it
52 is, I would have more time for Git. As it is, I have to budget my time so
53 that I get anything done at all.
54 </ul>
55 </p><p>
56 These issues have been postponed due to Steffen taking a well-deserved
57 vacation, which means that I have to act as msysGit maintainer again.
58 </p><p>
59 And this coming week, I will have other things to do in all likeliness, so
60 that I expect to be able to submit a <i>rebase -i -p</i> patch series only next
61 week. If not then, due to a heavy workload, it will be postponed to early
62 April.
63 </p><p>
64 Oh well, the joys of being excited by several competing projects! &#x263a;]]></description>
65 </item>
66 <item>
67 <title>New Git for Windows version</title>
68 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1236479389</link>
69 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1236479389</guid>
70 <pubDate>Sun, 08 Mar 2009 03:29:49 +0100</pubDate>
71 <description><![CDATA[New Git for Windows version
72 </p><p>
73 Phew. That was quite a day, almost exclusively spent on finishing that
74 installer. The worst part: updating GCC seemed not to be such a good idea
75 after all...
76 </p><p>
77 For Windows, we need to use the printf format <i>%I64u</i> (which is
78 non-standard, in the common way of Microsoft) if you want to print 64-bit
79 wide unsigned numbers. The rest of the world accepts the standard <i>%llu</i>.
80 </p><p>
81 After upgrading to the new GCC, a lot of warnings appeared, complaining
82 about <i>%I64u</i>. The warnings went away when I replaced the format with
83 <i>%llu</i>.
84 </p><p>
85 Being the naive I am, I mistook that for a sign that we could finally go
86 more standards-compliant.
87 </p><p>
88 However, it only means that we have to live with the warnings for now, as
89 the C runtime provided on Windows still strongly disagrees with standards
90 (and it has to continue to do so, lest it break existing programs).
91 </p><p>
92 Sigh.
93 </p><p>
94 At least I have the feeling that I caught the most important bugs before
95 releasing.]]></description>
96 </item>
97 <item>
98 <title>Code reviews</title>
99 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1235092615</link>
100 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1235092615</guid>
101 <pubDate>Fri, 20 Feb 2009 02:16:55 +0100</pubDate>
102 <description><![CDATA[Code reviews
103 </p><p>
104 It has been said that reviewing patches is a most thankless job. As I really
105 like the elegance of Git's source code, and care a lot about it, I did not
106 think that it was thankless, just a little bit tedious (especially when the
107 patch authors mistake criticism for personal attacks).
108 </p><p>
109 Usually, I am pretty good at ignoring insults as responses to my comments;
110 after all, I have a lot more enjoyable things to do than to spend time talking
111 to a guy who shows how wise he is when he thinks that I criticize him
112 <u>personally</u> when I just try to enhance his work, by offering a little bit of
113 my knowledge.
114 </p><p>
115 However, in the last days, three people really seemed to want to insult me,
116 to make me go away, to stop the fun I have with Git.
117 </p><p>
118 And they almost succeeded.
119 </p><p>
120 So I guess it is time to reassess my priorities, and maybe stop reviewing
121 Git patches altogether.]]></description>
122 </item>
123 <item>
124 <title>Interactive rebase just learnt a new command: topic</title>
125 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1234409395</link>
126 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1234409395</guid>
127 <pubDate>Thu, 12 Feb 2009 04:29:55 +0100</pubDate>
128 <description><![CDATA[Interactive <i>rebase</i> just learnt a new command: <i>topic</i>
129 </p><p>
130 Today I am pretty pleased with myself. Two projects at my day job got a real
131 boost, and I implemented a shortcut that avoids the ugly 'bookmark' statement
132 in rebase scripts most of the time.
133 </p><p>
134 A typical rebase script, generated by <i>git rebase -i -p $COMMIT</i> will look
135 something like this:
136 </p><p>
137 <table
138 border=1 bgcolor=white>
139 <tr><td bgcolor=lightblue colspan=3>
140 <pre> </pre>
141 </td></tr>
142 <tr><td>
143 <table cellspacing=5 border=0
144 style="color:black;">
145 <tr><td>
146 <pre>
147 pick 1234567 My first commit
148 topic begin super-cool-feature
149 pick 2345678 The super cool feature
150 pick 3456789 Documentation for the super cool feature
151 topic end super-cool-feature
152 </pre>
153 </td></tr>
154 </table>
155 </td></tr>
156 </table>
157 </p><p>
158 The result will be a merge commit at the HEAD whose first parent is
159 "My first commit", whose second parent is "Documentation for the super
160 cool feature" and whose commit message is "Merge branch 'super-cool-feature'".
161 </p><p>
162 Side note: internally, <i>topic begin $NAME [at $COMMIT]</i> will be handled as if
163 you wrote <i>bookmark merge-parent-of-$NAME; goto $COMMIT</i>, and
164 <i>topic end $NAME [$MESSAGE]</i> will be handled as if you wrote
165 <i>bookmark $NAME; goto merge-parent-of-$NAME; merge parents $NAME [original $MARK Merge branch '$NAME']</i>.
166 </p><p>
167 Of course, being more concise, the 'topic' statement is not only nicer to the
168 eye, but also less error-prone.
169 </p><p>
170 And hopefully many people will agree with me that this rebase script is pretty
171 intuitive.]]></description>
172 </item>
173 <item>
174 <title>Thunderbird, oh Thunderbird, you always make my small brain hurt</title>
175 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1234320806</link>
176 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1234320806</guid>
177 <pubDate>Wed, 11 Feb 2009 03:53:26 +0100</pubDate>
178 <description><![CDATA[Thunderbird, oh Thunderbird, you always make my small brain hurt
179 </p><p>
180 There was a lengthy discussion on the Git mailing list about using Thunderbird,
181 a not quite unpopular mailing program, to send inline patches.
182 </p><p>
183 It is really kind of sad that the Thunderbird developers do not see how
184 stubbornly they offend quite a number of people and scare them away from their
185 program. After all, you should try to be liberal in what you accept and strict
186 in what you emit. No, that does not mean that you should force others to
187 switch their mailers because you strictly adher to your philosophy in what you
188 emit, ignoring the rest of the world.
189 </p><p>
190 In any case, I am not affected (as long as I do not get mails from a poor soul
191 stuck with Thunderbird).
192 </p><p>
193 But I was a bit mean to that Thunderbird guy I dragged into the discussion, and
194 he seems really offended.
195 </p><p>
196 So I thought I'd give him a real reason to feel offended: I'll just do his work:
197 </p><p>
198 http://<a href=http://repo.or.cz>repo.or.cz</a>/w/UnFlowedThunderbird.git
199 </p><p>
200 It took my free time of two days, being not a Thunderbird developer myself.
201 Hopefully it works, and hopefully some people will feel really ashamed now.]]></description>
202 </item>
203 <item>
204 <title>format-patch --thread and Alpine</title>
205 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1234141489</link>
206 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1234141489</guid>
207 <pubDate>Mon, 09 Feb 2009 02:04:49 +0100</pubDate>
208 <description><![CDATA[<i>format-patch --thread</i> and Alpine
209 </p><p>
210 I started recently to pipe the output of
211 <i>git format-patch --cover-letter --stdout ...</i> directly into the
212 <i>postponed-msgs</i> folder Alpine uses, instead of pasting files into the
213 mailer.
214 </p><p>
215 The idea is to pretend that I continue a postponed mail, but in reality I
216 never wrote it, <i>format-patch</i> did.
217 </p><p>
218 However, I had problems with the <i>--thread</i> option that is implied by
219 <i>--cover-letter</i>. Alpine always generated new message IDs without adjusting
220 the <i>In-reply-to:</i> and <i>References:</i> headers of the other mails.
221 </p><p>
222 Now I found out that the reason is that the <i>Fcc:</i> headers were missing in
223 the mails, and Alpine generated them, making up new message IDs in the process.
224 </p><p>
225 Therefore I have an alias now which sets not only the <i>Fcc:</i> header, but also
226 the <i>To:</i> headers by rewriting the stream using <i>sed</i>. This is slightly
227 ugly, but so is the handling of headers in <i>format-patch</i>: if you thought
228 you could specify arbitrary headers using the command line, you are mistaken:
229 you can do that only by editing the config.
230 </p><p>
231 While at it, I also noticed a bug whereby <i>--thread --in-reply-to=...</i> simply
232 forgets the <i>--thread</i>. Maybe this week I will find time to address this bug.]]></description>
233 </item>
234 <item>
235 <title>rebase updates</title>
236 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1234140696</link>
237 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1234140696</guid>
238 <pubDate>Mon, 09 Feb 2009 01:51:36 +0100</pubDate>
239 <description><![CDATA[<i>rebase</i> updates
240 </p><p>
241 Phew. The last few days, I was mainly chasing bugs I introduced due to being
242 too tired to work on the merge-preserving, interactive <i>rebase</i>.
243 </p><p>
244 But finally I have something I can start working with. After my failed
245 experiment to use git-blame to split topic branches, I will sort the commits
246 in my <i>my-next</i> branch into topic branches manually.
247 </p><p>
248 Then I will add an option to <i>rebase -i -p</i> to rewrite refs which point to
249 rewritten commits, so that I can have branches <i>rebase-i-p</i>, <i>add-e</i>, etc
250 and all of them are automatically updated when I <i>rebase -i -p</i> the <i>my-next</i>
251 branch.
252 </p><p>
253 In the process, not only have I learnt the value of the <i>bookmark</i> command,
254 but made quite a few-much needed cleanups (which make
255 <i>git-rebase--interactive.sh</i> longer, but much more understandable).
256 </p><p>
257 Hopefully Stephan will pick the changes in the "rebase protocol" up, and then
258 we can have a sequencer with which I can start to make a graphical interactive
259 rebase using git-gui. Or gitk.
260 </p><p>
261 Maybe.]]></description>
262 </item>
263 <item>
264 <title>The infamous mark command in the rebase command</title>
265 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1234040744</link>
266 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1234040744</guid>
267 <pubDate>Sat, 07 Feb 2009 22:05:44 +0100</pubDate>
268 <description><![CDATA[The infamous <i>mark</i> command in the <i>rebase</i> command
269 </p><p>
270 I realized today how easy it is to lose commits with the "merge preserving"
271 mode of the interactive rebase. In my case, it was when I tried to move a
272 bunch of commits from the tip of my branch into a topic branch.
273 </p><p>
274 But after moving the commits, I forgot to update the parent of the merge
275 commit. Possibly a mark command could have helped. The very same command
276 I called a nightmare for usability.
277 </p><p>
278 So I was wrong. Big news. &#x263a;
279 </p><p>
280 However, I think that the syntax "mark :1" is something best left for
281 machine consumption, not for human beings.
282 </p><p>
283 But I have an idea: we could use some garbled commit subject, or in case of
284 merge parents, the merge subject as some human readable title of the mark.
285 </p><p>
286 The rebase script would then look something like this:
287 </p><p>
288 <table
289 border=1 bgcolor=white>
290 <tr><td bgcolor=lightblue colspan=3>
291 <pre> </pre>
292 </td></tr>
293 <tr><td>
294 <table cellspacing=5 border=0
295 style="color:black;">
296 <tr><td>
297 <pre>
298 pick abcdefg Some ultra cool commit
299 bookmark ultra-cool
300 goto upstream
301 pick hijklmn Some other cool commit
302 merge parent ultra-cool Merge 'ultra-cool' into master
303 </pre>
304 </td></tr>
305 </table>
306 </td></tr>
307 </table>
308 </p><p>
309 The good news is: I added code that refuses to finish a rebase when there
310 are commits that were rewritten, but not part of the new HEAD's ancestry.]]></description>
311 </item>
312 <item>
313 <title>New valgrind series</title>
314 <link>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1233707628</link>
315 <guid>http://repo.or.cz/w/git/dscho.git?a=blob_plain;hb=blog;f=index.html#1233707628</guid>
316 <pubDate>Wed, 04 Feb 2009 01:33:48 +0100</pubDate>
317 <description><![CDATA[New valgrind series
318 </p><p>
319 I spent quite some time cleaning up that patch series, and feel pretty
320 exhausted.
321 </p><p>
322 Granted, the new <i>git rebase -i -p</i> does its job without complaint so far
323 (so much so that I think I'll release a version of my <i>rebase</i> series
324 soonish), but it <u>is</u> a hassle when you have patches that you have a hard
325 time to decide upon the order/commit boundaries.
326 </p><p>
327 For example, I could imagine that the patch making the location of the
328 templates independent of the location of the Git binaries should come
329 <u>before</u> my patch series, and the valgrind specific part should then
330 be squashed into the first valgrind commit.
331 </p><p>
332 Also, it uses two features of valgrind 3.4.0:
333 </p><p>
334 <ul>
335 <li><i>...</i> in the suppression file, and
336 <li><i>--track-origins=yes</i>
337 </ul>
338 </p><p>
339 The latter is actually the reason I am pretty willing to keep the
340 requirement of that valgrind version, as it is really, really useful.
341 </p><p>
342 I guess we will see what happens to it.]]></description>
343 </item>
344 </channel>
345 </rss>