@matheusbsbs / matheus-bagliano / commits / 768d6d1005
Fork 0

Skip over empty commits.

But we still need to get rid of unnecessary merge commits somehow...

Avery Pennarun committed Apr 24, 2009 at 17:53 UTC 768d6d10051cbf2d0261b9cf671b1f969fb77a61
1 file changed +42 -13
git-subtree.sh
+42 -13
@@ -167,6 +167,32 @@ merge_msg()
167 EOF
168 }
169
170 +tree_for_commit()
171 +{
172 + git ls-tree "$1" -- "$dir" |
173 + while read mode type tree name; do
174 + assert [ "$name" = "$dir" ]
175 + echo $tree
176 + break
177 + done
178 +}
179 +
180 +tree_changed()
181 +{
182 + tree=$1
183 + shift
184 + if [ $# -ne 1 ]; then
185 + return 0 # weird parents, consider it changed
186 + else
187 + ptree=$(tree_for_commit $1)
188 + if [ "$ptree" != "$tree" ]; then
189 + return 0 # changed
190 + else
191 + return 1 # not changed
192 + fi
193 + fi
194 +}
195 +
196 cmd_split()
197 {
198 debug "Splitting $dir..."
@@ -199,21 +225,24 @@ cmd_split()
225 newparents=$(cache_get $parents)
226 debug " newparents: $newparents"
227
202 - git ls-tree $rev -- "$dir" |
203 - while read mode type tree name; do
204 - assert [ "$name" = "$dir" ]
205 - debug " tree is: $tree"
206 - p=""
207 - for parent in $newparents; do
208 - p="$p -p $parent"
209 - done
228 + tree=$(tree_for_commit $rev)
229 + debug " tree is: $tree"
230 + [ -z $tree ] && continue
231 +
232 + p=""
233 + for parent in $newparents; do
234 + p="$p -p $parent"
235 + done
236
237 + if tree_changed $tree $parents; then
238 newrev=$(copy_commit $rev $tree "$p") || exit $?
212 - debug " newrev is: $newrev"
213 - cache_set $rev $newrev
214 - cache_set latest_new $newrev
215 - cache_set latest_old $rev
216 - done || exit $?
239 + else
240 + newrev="$newparents"
241 + fi
242 + debug " newrev is: $newrev"
243 + cache_set $rev $newrev
244 + cache_set latest_new $newrev
245 + cache_set latest_old $rev
246 done || exit $?
247 latest_new=$(cache_get latest_new)
248 if [ -z "$latest_new" ]; then