What's cooking (2008/06 #01)
Junio C Hamano committed
Aug 5, 2008 at 21:44 UTC
7d77f2e9cc2ccb95922932ddd8499fe17139177a
4 files changed
+619
.gitattributes
new
+1
@@ -0,0 +1 @@
1
+whats-cooking.txt diff=whatscooking
README.cooking
new
+17
@@ -0,0 +1,17 @@
1
+The compare-cooking.perl script is meant to help viewing the differences
2
+between periodical "What's cooking" messages, and can be used as an
3
+external diff driver by:
4
+
5
+ $ git config diff.whatscooking.command ./compare-cooking.perl
6
+
7
+to produce this section in your .git/config
8
+
9
+ [diff "whatscooking"]
10
+ command = ./compare-cooking.perl
11
+
12
+You can use e.g.
13
+
14
+ $ git log -p --ext-diff whats-cooking.txt
15
+ $ git show --ext-diff whats-cooking.txt
16
+
17
+to review the history.
compare-cooking.perl
new
+293
@@ -0,0 +1,293 @@
1
+#!/usr/bin/perl -w
2
+
3
+my ($old, $new);
4
+
5
+if (@ARGV == 7) {
6
+ # called as GIT_EXTERNAL_DIFF script
7
+ $old = parse_cooking($ARGV[1]);
8
+ $new = parse_cooking($ARGV[4]);
9
+} else {
10
+ # called with old and new
11
+ $old = parse_cooking($ARGV[0]);
12
+ $new = parse_cooking($ARGV[1]);
13
+}
14
+compare_cooking($old, $new);
15
+
16
+################################################################
17
+
18
+use File::Temp qw(tempfile);
19
+
20
+sub compare_them {
21
+ local($_);
22
+ my ($a, $b, $force, $soft) = @_;
23
+
24
+ if ($soft) {
25
+ $plus = $minus = ' ';
26
+ } else {
27
+ $plus = '+';
28
+ $minus = '-';
29
+ }
30
+
31
+ if (!defined $a->[0]) {
32
+ return map { "$plus$_\n" } map { split(/\n/) } @{$b};
33
+ } elsif (!defined $b->[0]) {
34
+ return map { "$minus$_\n" } map { split(/\n/) } @{$a};
35
+ } elsif (join('', @$a) eq join('', @$b)) {
36
+ if ($force) {
37
+ return map { " $_\n" } map { split(/\n/) } @{$a};
38
+ } else {
39
+ return ();
40
+ }
41
+ }
42
+ my ($ah, $aname) = tempfile();
43
+ my ($bh, $bname) = tempfile();
44
+ my $cnt = 0;
45
+ my @result = ();
46
+ for (@$a) {
47
+ print $ah $_;
48
+ $cnt += tr/\n/\n/;
49
+ }
50
+ for (@$b) {
51
+ print $bh $_;
52
+ $cnt += tr/\n/\n/;
53
+ }
54
+ close $ah;
55
+ close $bh;
56
+ open(my $fh, "-|", 'diff', "-U$cnt", $aname, $bname);
57
+ $cnt = 0;
58
+ while (<$fh>) {
59
+ next if ($cnt++ < 3);
60
+ push @result, $_;
61
+ }
62
+ close $fh;
63
+ unlink ($aname, $bname);
64
+ return @result;
65
+}
66
+
67
+sub flush_topic {
68
+ my ($cooking, $name, $desc) = @_;
69
+ my $section = $cooking->{SECTIONS}[-1];
70
+
71
+ return if (!defined $name);
72
+
73
+ $desc =~ s/\s+\Z/\n/s;
74
+ $desc =~ s/\A\s+//s;
75
+ my $topic = +{
76
+ IN_SECTION => $section,
77
+ NAME => $name,
78
+ DESC => $desc,
79
+ };
80
+ $cooking->{TOPICS}{$name} = $topic;
81
+ push @{$cooking->{TOPIC_ORDER}}, $name;
82
+}
83
+
84
+sub parse_section {
85
+ my ($cooking, @line) = @_;
86
+
87
+ while (@line && $line[-1] =~ /^\s*$/) {
88
+ pop @line;
89
+ }
90
+ return if (!@line);
91
+
92
+ if (!exists $cooking->{SECTIONS}) {
93
+ $cooking->{SECTIONS} = [];
94
+ $cooking->{TOPICS} = {};
95
+ $cooking->{TOPIC_ORDER} = [];
96
+ }
97
+ if (!exists $cooking->{HEADER}) {
98
+ my $line = join('', @line);
99
+ $line =~ s/\A.*?\n\n//s;
100
+ $cooking->{HEADER} = $line;
101
+ return;
102
+ }
103
+ if (!exists $cooking->{GREETING}) {
104
+ $cooking->{GREETING} = join('', @line);
105
+ return;
106
+ }
107
+
108
+ my ($section_name, $topic_name, $topic_desc);
109
+ for (@line) {
110
+ if (!defined $section_name && /^\[(.*)\]$/) {
111
+ $section_name = $1;
112
+ push @{$cooking->{SECTIONS}}, $section_name;
113
+ next;
114
+ }
115
+ if (/^\* (\S+) /) {
116
+ my $next_name = $1;
117
+ flush_topic($cooking, $topic_name, $topic_desc);
118
+ $topic_name = $next_name;
119
+ $topic_desc = '';
120
+ }
121
+ $topic_desc .= $_;
122
+ }
123
+ flush_topic($cooking, $topic_name, $topic_desc);
124
+}
125
+
126
+sub dump_cooking {
127
+ my ($cooking) = @_;
128
+ print $cooking->{HEADER};
129
+ print "-" x 50, "\n";
130
+ print $cooking->{GREETING};
131
+ for my $section_name (@{$cooking->{SECTIONS}}) {
132
+ print "\n", "-" x 50, "\n";
133
+ print "[$section_name]\n";
134
+ for my $topic_name (@{$cooking->{TOPIC_ORDER}}) {
135
+ $topic = $cooking->{TOPICS}{$topic_name};
136
+ next if ($topic->{IN_SECTION} ne $section_name);
137
+ print "\n", $topic->{DESC};
138
+ }
139
+ }
140
+}
141
+
142
+sub parse_cooking {
143
+ my ($filename) = @_;
144
+ my (%cooking, @current, $fh);
145
+ open $fh, "<", $filename
146
+ or die "cannot open $filename: $!";
147
+ while (<$fh>) {
148
+ if (/^-{30,}$/) {
149
+ parse_section(\%cooking, @current);
150
+ @current = ();
151
+ next;
152
+ }
153
+ push @current, $_;
154
+ }
155
+ close $fh;
156
+ parse_section(\%cooking, @current);
157
+
158
+ return \%cooking;
159
+}
160
+
161
+sub compare_topics {
162
+ my ($a, $b) = @_;
163
+ if (!@$a || !@$b) {
164
+ print compare_them($a, $b, 1, 1);
165
+ return;
166
+ }
167
+
168
+ # otherwise they both have title.
169
+ $a = [map { "$_\n" } split(/\n/, join('', @$a))];
170
+ $b = [map { "$_\n" } split(/\n/, join('', @$b))];
171
+ my $atitle = shift @$a;
172
+ my $btitle = shift @$b;
173
+ print compare_them([$atitle], [$btitle], 1);
174
+
175
+ my (@atail, @btail);
176
+ while (@$a && $a->[-1] !~ /^\s/) {
177
+ unshift @atail, pop @$a;
178
+ }
179
+ while (@$b && $b->[-1] !~ /^\s/) {
180
+ unshift @btail, pop @$b;
181
+ }
182
+ print compare_them($a, $b);
183
+ print compare_them(\@atail, \@btail);
184
+}
185
+
186
+sub compare_class {
187
+ my ($fromto, $names, $topics) = @_;
188
+
189
+ my (@where, %where);
190
+ for my $name (@$names) {
191
+ my $t = $topics->{$name};
192
+ my ($a, $b, $in, $force);
193
+ if ($t->{OLD} && $t->{NEW}) {
194
+ $a = [$t->{OLD}{DESC}];
195
+ $b = [$t->{NEW}{DESC}];
196
+ if ($t->{OLD}{IN_SECTION} ne $t->{NEW}{IN_SECTION}) {
197
+ $force = 1;
198
+ $in = '';
199
+ } else {
200
+ $in = "[$t->{NEW}{IN_SECTION}]";
201
+ }
202
+ } elsif ($t->{OLD}) {
203
+ $a = [$t->{OLD}{DESC}];
204
+ $b = [];
205
+ $in = "Was in [$t->{OLD}{IN_SECTION}]";
206
+ } else {
207
+ $a = [];
208
+ $b = [$t->{NEW}{DESC}];
209
+ $in = "[$t->{NEW}{IN_SECTION}]";
210
+ }
211
+ next if (defined $a->[0] &&
212
+ defined $b->[0] &&
213
+ $a->[0] eq $b->[0] && !$force);
214
+
215
+ if (!exists $where{$in}) {
216
+ push @where, $in;
217
+ $where{$in} = [];
218
+ }
219
+ push @{$where{$in}}, [$a, $b];
220
+ }
221
+
222
+ return if (!@where);
223
+ for my $in (@where) {
224
+ my @bag = @{$where{$in}};
225
+ if (defined $fromto && $fromto ne '') {
226
+ print "\n", '-' x 50, "\n$fromto\n";
227
+ $fromto = undef;
228
+ }
229
+ print "\n$in\n" if ($in ne '');
230
+ for (@bag) {
231
+ my ($a, $b) = @{$_};
232
+ print "\n";
233
+ compare_topics($a, $b);
234
+ }
235
+ }
236
+}
237
+
238
+sub compare_cooking {
239
+ my ($old, $new) = @_;
240
+
241
+ print compare_them([$old->{HEADER}], [$new->{HEADER}]);
242
+ print compare_them([$old->{GREETING}], [$new->{GREETING}]);
243
+
244
+ my (@sections, %sections, @topics, %topics, @fromto, %fromto);
245
+
246
+ for my $section_name (@{$old->{SECTIONS}}, @{$new->{SECTIONS}}) {
247
+ next if (exists $sections{$section_name});
248
+ $sections{$section_name} = scalar @sections;
249
+ push @sections, $section_name;
250
+ }
251
+
252
+ my $gone_class = "Gone topics";
253
+ my $born_class = "Born topics";
254
+ my $stay_class = "Other topics";
255
+
256
+ push @fromto, $born_class;
257
+ for my $topic_name (@{$old->{TOPIC_ORDER}}, @{$new->{TOPIC_ORDER}}) {
258
+ next if (exists $topics{$topic_name});
259
+ push @topics, $topic_name;
260
+
261
+ my $oldtopic = $old->{TOPICS}{$topic_name};
262
+ my $newtopic = $new->{TOPICS}{$topic_name};
263
+ $topics{$topic_name} = +{
264
+ OLD => $oldtopic,
265
+ NEW => $newtopic,
266
+ };
267
+ my $oldsec = $oldtopic->{IN_SECTION};
268
+ my $newsec = $newtopic->{IN_SECTION};
269
+ if (defined $oldsec && defined $newsec) {
270
+ if ($oldsec ne $newsec) {
271
+ my $fromto =
272
+ "Moved from [$oldsec] to [$newsec]";
273
+ if (!exists $fromto{$fromto}) {
274
+ $fromto{$fromto} = [];
275
+ push @fromto, $fromto;
276
+ }
277
+ push @{$fromto{$fromto}}, $topic_name;
278
+ } else {
279
+ push @{$fromto{$stay_class}}, $topic_name;
280
+ }
281
+ } elsif (defined $oldsec) {
282
+ push @{$fromto{$gone_class}}, $topic_name;
283
+ } else {
284
+ push @{$fromto{$born_class}}, $topic_name;
285
+ }
286
+ }
287
+ push @fromto, $stay_class;
288
+ push @fromto, $gone_class;
289
+
290
+ for my $fromto (@fromto) {
291
+ compare_class($fromto, $fromto{$fromto}, \%topics);
292
+ }
293
+}
whats-cooking.txt
new
+308
@@ -0,0 +1,308 @@
1
+Subject: What's cooking in git.git (Jun 2008, issue #01; Sat, 21)
2
+
3
+What's cooking in git.git (Jun 2008, issue #01; Sat, 21)
4
+--------------------------------------------------------
5
+
6
+Here are the topics that have been cooking. Commits prefixed
7
+with '-' are only in 'pu' while commits prefixed with '+' are
8
+in 'next'.
9
+
10
+The topics list the commits in reverse chronological order.
11
+
12
+It already is beginning to become clear what 1.6.0 will look like. What's
13
+already in 'next' all are well intentioned (I do not guarantee they are
14
+already bug-free --- that is what cooking them in 'next' is for) and are
15
+good set of feature enhancements. But bigger changes will be:
16
+
17
+ * MinGW will be in.
18
+
19
+ * /usr/bin/git-cat-file is no more. The bulk of the git commands will
20
+ move to /usr/libexec/git-core/ or somesuch.
21
+
22
+ * git-merge will be rewritten in C.
23
+
24
+Currently tip of 'pu' is broken and does not pass tests, as j6t/mingw has
25
+interaction with dr/ceiling and jc/merge-theirs has interaction with
26
+mv/merge-in-c.
27
+
28
+----------------------------------------------------------------
29
+[New Topics]
30
+
31
+* jc/merge-theirs (Fri Jun 20 00:17:59 2008 -0700) 2 commits
32
+ - git-merge-recursive-{ours,theirs}
33
+ - git-merge-file --ours, --theirs
34
+
35
+Punting a merge by discarding your own work in conflicting parts but still
36
+salvaging the parts that are cleanly automerged. It is likely that this
37
+will result in nonsense mishmash, but somehow often people want this, so
38
+here they are. The interface to the backends may need to change, though.
39
+
40
+* lt/racy-empty (Tue Jun 10 10:44:43 2008 -0700) 1 commit
41
+ + racy-git: an empty blob has a fixed object name
42
+
43
+* ph/mergetool (Mon Jun 16 17:33:41 2008 -0600) 1 commit
44
+ + Remove the use of '--' in merge program invocation
45
+
46
+* j6t/mingw (Sat Nov 17 20:48:14 2007 +0100) 38 commits
47
+ - compat/pread.c: Add a forward declaration to fix a warning
48
+ - Windows: Fix ntohl() related warnings about printf formatting
49
+ - Windows: TMP and TEMP environment variables specify a temporary
50
+ directory.
51
+ - Windows: Make 'git help -a' work.
52
+ - Windows: Work around an oddity when a pipe with no reader is
53
+ written to.
54
+ - Windows: Make the pager work.
55
+ - When installing, be prepared that template_dir may be relative.
56
+ - Windows: Use a relative default template_dir and ETC_GITCONFIG
57
+ - Windows: Compute the fallback for exec_path from the program
58
+ invocation.
59
+ - Turn builtin_exec_path into a function.
60
+ - Windows: Use a customized struct stat that also has the st_blocks
61
+ member.
62
+ - Windows: Add a custom implementation for utime().
63
+ - Windows: Add a new lstat and fstat implementation based on Win32
64
+ API.
65
+ - Windows: Implement a custom spawnve().
66
+ - Windows: Implement wrappers for gethostbyname(), socket(), and
67
+ connect().
68
+ - Windows: Work around incompatible sort and find.
69
+ - Windows: Implement asynchronous functions as threads.
70
+ - Windows: Disambiguate DOS style paths from SSH URLs.
71
+ - Windows: A rudimentary poll() emulation.
72
+ - Windows: Change the name of hook scripts to make them not
73
+ executable.
74
+ - Windows: Implement start_command().
75
+ - Windows: A pipe() replacement whose ends are not inherited to
76
+ children.
77
+ - Windows: Wrap execve so that shell scripts can be invoked.
78
+ - Windows: Implement setitimer() and sigaction().
79
+ - Windows: Fix PRIuMAX definition.
80
+ - Windows: Implement gettimeofday().
81
+ - Windows: Handle absolute paths in
82
+ safe_create_leading_directories().
83
+ - Windows: Treat Windows style path names.
84
+ - setup.c: Prepare for Windows directory separators.
85
+ - Windows: Work around misbehaved rename().
86
+ - Windows: always chmod(, 0666) before unlink().
87
+ - Windows: A minimal implemention of getpwuid().
88
+ - Windows: Implement a wrapper of the open() function.
89
+ - Windows: Strip ".exe" from the program name.
90
+ - Windows: Use the Windows style PATH separator ';'.
91
+ - Add target architecture MinGW.
92
+ - Compile some programs only conditionally.
93
+ - Add compat/regex.[ch] and compat/fnmatch.[ch].
94
+
95
+No explanation is necessary ;-).
96
+
97
+* sn/static (Thu Jun 19 08:21:11 2008 +0900) 2 commits
98
+ + config.c: make git_env_bool() static
99
+ + environment.c: remove unused function
100
+
101
+* lt/config-fsync (Wed Jun 18 15:18:44 2008 -0700) 4 commits
102
+ + Add config option to enable 'fsync()' of object files
103
+ + Split up default "i18n" and "branch" config parsing into helper
104
+ routines
105
+ + Split up default "user" config parsing into helper routine
106
+ + Split up default "core" config parsing into helper routine
107
+
108
+* lw/gitweb (Thu Jun 19 22:03:21 2008 +0200) 1 commit
109
+ + gitweb: standarize HTTP status codes
110
+
111
+* mv/merge-in-c (Fri Jun 20 01:22:36 2008 +0200) 11 commits
112
+ - Add new test to ensure git-merge handles more than 25 refs.
113
+ - Build in merge
114
+ - Introduce filter_independent() in commit.c
115
+ - Introduce get_octopus_merge_bases() in commit.c
116
+ - git-fmt-merge-msg: make it usable from other builtins
117
+ - Move read_cache_unmerged() to read-cache.c
118
+ - parseopt: add a new PARSE_OPT_ARGV0_IS_AN_OPTION option
119
+ - Add new test to ensure git-merge handles pull.twohead and
120
+ pull.octopus
121
+ - Move parse-options's skip_prefix() to git-compat-util.h
122
+ - Move commit_list_count() to commit.c
123
+ - Move split_cmdline() to alias.c
124
+
125
+* jc/maint-combine-diff-pre-context (Wed Jun 18 23:59:41 2008 -0700) 1 commit
126
+ + diff -c/--cc: do not include uninteresting deletion before leading
127
+ context
128
+
129
+* lt/maint-gitdir-relative (Thu Jun 19 12:34:06 2008 -0700) 1 commit
130
+ + Make git_dir a path relative to work_tree in setup_work_tree()
131
+
132
+----------------------------------------------------------------
133
+[Actively Cooking]
134
+
135
+* nd/dashless (Wed Nov 28 23:21:57 2007 +0700) 1 commit
136
+ + Move all dashed-form commands to libexecdir
137
+
138
+Scheduled for 1.6.0.
139
+
140
+* jc/dashless (Sat Dec 1 22:09:22 2007 -0800) 2 commits
141
+ - Prepare execv_git_cmd() for removal of builtins from the
142
+ filesystem
143
+ - git-shell: accept "git foo" form
144
+
145
+We do not plan to remove git-foo form completely from the filesystem at
146
+this point, but git-shell may need to be updated.
147
+
148
+* sg/merge-options (Sun Apr 6 03:23:47 2008 +0200) 1 commit
149
+ + merge: remove deprecated summary and diffstat options and config
150
+ variables
151
+
152
+* dr/ceiling (Mon May 19 23:49:34 2008 -0700) 4 commits
153
+ + Eliminate an unnecessary chdir("..")
154
+ + Add support for GIT_CEILING_DIRECTORIES
155
+ + Fold test-absolute-path into test-path-utils
156
+ + Implement normalize_absolute_path
157
+
158
+* jn/web (Tue Jun 10 19:21:44 2008 +0200) 2 commits
159
+ + gitweb: Separate generating 'sort by' table header
160
+ + gitweb: Separate filling list of projects info
161
+
162
+* rs/archive-ignore (Sun Jun 8 18:42:33 2008 +0200) 1 commit
163
+ + Teach new attribute 'export-ignore' to git-archive
164
+
165
+* rg/gitweb (Fri Jun 6 09:53:32 2008 +0200) 1 commit
166
+ + gitweb: remove git_blame and rename git_blame2 to git_blame
167
+
168
+* kh/update-ref (Tue Jun 3 01:34:53 2008 +0200) 2 commits
169
+ + Make old sha1 optional with git update-ref -d
170
+ + Clean up builtin-update-ref's option parsing
171
+
172
+* mo/status-untracked (Thu Jun 5 14:47:50 2008 +0200) 3 commits
173
+ + Add configuration option for default untracked files mode
174
+ + Add argument 'no' commit/status option -u|--untracked-files
175
+ + Add an optional <mode> argument to commit/status -u|--untracked-
176
+ files option
177
+
178
+* sr/tests (Sun Jun 8 16:04:35 2008 +0200) 3 commits
179
+ + Hook up the result aggregation in the test makefile.
180
+ + A simple script to parse the results from the testcases
181
+ + Modify test-lib.sh to output stats to t/test-results/*
182
+
183
+* jh/clone-packed-refs (Sun Jun 15 16:06:16 2008 +0200) 4 commits
184
+ + Teach "git clone" to pack refs
185
+ + Prepare testsuite for a "git clone" that packs refs
186
+ + Move pack_refs() and friends into libgit
187
+ + Incorporate fetched packs in future object traversal
188
+
189
+This is useful when cloning from a repository with insanely large number
190
+of refs.
191
+
192
+* jc/reflog-expire (Sun Jun 15 23:48:46 2008 -0700) 1 commit
193
+ - Per-ref reflog expiry configuration
194
+
195
+Perhaps a good foundation for optionally unexpirable stash. As 1.6.0 will
196
+be a good time to make backward incompatible changes, we might make expiry
197
+period of stash 'never' in new repositories. Needs a concensus.
198
+
199
+* lw/perlish (Thu Jun 19 22:32:49 2008 +0200) 2 commits
200
+ + Git.pm: add test suite
201
+ + t/test-lib.sh: add test_external and test_external_without_stderr
202
+
203
+Beginning of regression tests for Perl part of the system.
204
+
205
+* jk/test (Sat Jun 14 03:28:07 2008 -0400) 5 commits
206
+ + enable whitespace checking of test scripts
207
+ + avoid trailing whitespace in zero-change diffstat lines
208
+ + avoid whitespace on empty line in automatic usage message
209
+ + mask necessary whitespace policy violations in test scripts
210
+ + fix whitespace violations in test scripts
211
+
212
+Tightens whitespace rules for t/*.sh scripts.
213
+
214
+* pb/fast-export (Wed Jun 11 13:17:04 2008 +0200) 1 commit
215
+ + builtin-fast-export: Add importing and exporting of revision marks
216
+
217
+----------------------------------------------------------------
218
+[Graduated to "master"]
219
+
220
+Nothing today but expect many small ones to come out of 'next' this
221
+weekend.
222
+
223
+----------------------------------------------------------------
224
+[On Hold]
225
+
226
+* jc/blame (Wed Jun 4 22:58:40 2008 -0700) 7 commits
227
+ - blame: show "previous" information in --porcelain/--incremental
228
+ format
229
+ - git-blame: refactor code to emit "porcelain format" output
230
+ + git-blame --reverse
231
+ + builtin-blame.c: allow more than 16 parents
232
+ + builtin-blame.c: move prepare_final() into a separate function.
233
+ + rev-list --children
234
+ + revision traversal: --children option
235
+
236
+The blame that finds where each line in the original lines moved to. This
237
+may help a GSoC project that wants to gather statistical overview of the
238
+history. The final presentation may need tweaking (see the log message of
239
+the commit ""git-blame --reverse" on the series).
240
+
241
+The tip two commits are for peeling to see what's behind the blamed
242
+commit, which we should be able to separate out into an independent topic
243
+from the rest.
244
+
245
+* jc/send-pack-tell-me-more (Thu Mar 20 00:44:11 2008 -0700) 1 commit
246
+ - "git push": tellme-more protocol extension
247
+
248
+Kicked back to 'pu' for now.
249
+
250
+* js/rebase-i-sequencer (Sun Apr 27 02:55:50 2008 -0400) 17 commits
251
+ - Use perl instead of tac
252
+ - Fix t3404 assumption that `wc -l` does not use whitespace.
253
+ - rebase -i: Use : in expr command instead of match.
254
+ - rebase -i: update the implementation of 'mark' command
255
+ - Add option --preserve-tags
256
+ - Teach rebase interactive the tag command
257
+ - Add option --first-parent
258
+ - Do rebase with preserve merges with advanced TODO list
259
+ - Select all lines with fake-editor
260
+ - Unify the length of $SHORT* and the commits in the TODO list
261
+ - Teach rebase interactive the merge command
262
+ - Move redo merge code in a function
263
+ - Teach rebase interactive the reset command
264
+ - Teach rebase interactive the mark command
265
+ - Move cleanup code into it's own function
266
+ - Don't append default merge message to -m message
267
+ - fake-editor: output TODO list if unchanged
268
+
269
+It is very likely that this whole thing will be reverted from 'next' and
270
+be replaced with the new sequenser series during 1.6.0 cycle.
271
+
272
+* sj/merge (Sat May 3 16:55:47 2008 -0700) 6 commits
273
+ - Introduce fast forward option only
274
+ - Head reduction before selecting merge strategy
275
+ - Restructure git-merge.sh
276
+ - Introduce -ff=<fast forward option>
277
+ - New merge tests
278
+ - Documentation for joining more than two histories
279
+
280
+This will interfere with Miklos's rewrite of merge to C.
281
+
282
+* jk/renamelimit (Sat May 3 13:58:42 2008 -0700) 1 commit
283
+ - diff: enable "too large a rename" warning when -M/-C is explicitly
284
+ asked for
285
+
286
+This would be the right thing to do for command line use, but gitk will be
287
+hit due to tcl/tk's limitation, so I am holding this back for now.
288
+
289
+* jc/cherry-pick (Wed Feb 20 23:17:06 2008 -0800) 3 commits
290
+ - WIP: rethink replay merge
291
+ - Start using replay-tree merge in cherry-pick
292
+ - revert/cherry-pick: start refactoring call to merge_recursive
293
+
294
+This is meant to improve cherry-pick's behaviour when renames are
295
+involved, by not using merge-recursive (whose d/f conflict resolution is
296
+quite broken), but unfortunately has stalled for some time now.
297
+
298
+* jc/stripspace (Sun Mar 9 00:30:35 2008 -0800) 6 commits
299
+ - git-am --forge: add Signed-off-by: line for the author
300
+ - git-am: clean-up Signed-off-by: lines
301
+ - stripspace: add --log-clean option to clean up signed-off-by:
302
+ lines
303
+ - stripspace: use parse_options()
304
+ - Add "git am -s" test
305
+ - git-am: refactor code to add signed-off-by line for the committer
306
+
307
+Just my toy at this moment.
308
+