Merge branch 'maint'
* maint: Prepare for 1.6.1.4. Make repack less likely to corrupt repository fast-export: ensure we traverse commits in topological order Clear the delta base cache if a pack is rebuilt Conflicts: RelNotesmaint
						commit
						30aa4fb15f
					
				|  | @ -0,0 +1,19 @@ | |||
| GIT v1.6.1.4 Release Notes | ||||
| ========================== | ||||
|  | ||||
| Fixes since v1.6.1.3 | ||||
| -------------------- | ||||
|  | ||||
| * "git fast-export" produced wrong output with some parents missing from | ||||
|   commits, when the history is clock-skewed. | ||||
|  | ||||
| * "git fast-import" sometimes failed to read back objects it just wrote | ||||
|   out and aborted, because it failed to flush stale cached data. | ||||
|  | ||||
| * "git repack" did not error out when necessary object was missing in the | ||||
|   repository. | ||||
|  | ||||
| Also includes minor documentation fixes and updates. | ||||
|  | ||||
| -- | ||||
| git shortlog --no-merges v1.6.1.3.. | ||||
|  | @ -514,6 +514,7 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix) | |||
|  | ||||
| 	get_tags_and_duplicates(&revs.pending, &extra_refs); | ||||
|  | ||||
| 	revs.topo_order = 1; | ||||
| 	if (prepare_revision_walk(&revs)) | ||||
| 		die("revision walk setup failed"); | ||||
| 	revs.diffopt.format_callback = show_filemodify; | ||||
|  |  | |||
|  | @ -88,32 +88,79 @@ if [ -z "$names" ]; then | |||
| 		echo Nothing new to pack. | ||||
| 	fi | ||||
| fi | ||||
| for name in $names ; do | ||||
|  | ||||
| # Ok we have prepared all new packfiles. | ||||
| mkdir -p "$PACKDIR" || exit | ||||
|  | ||||
| # First see if there are packs of the same name and if so | ||||
| # if we can move them out of the way (this can happen if we | ||||
| # repacked immediately after packing fully. | ||||
| rollback= | ||||
| failed= | ||||
| for name in $names | ||||
| do | ||||
| 	for sfx in pack idx | ||||
| 	do | ||||
| 		file=pack-$name.$sfx | ||||
| 		test -f "$PACKDIR/$file" || continue | ||||
| 		rm -f "$PACKDIR/old-$file" && | ||||
| 		mv "$PACKDIR/$file" "$PACKDIR/old-$file" || { | ||||
| 			failed=t | ||||
| 			break | ||||
| 		} | ||||
| 		rollback="$rollback $file" | ||||
| 	done | ||||
| 	test -z "$failed" || break | ||||
| done | ||||
|  | ||||
| # If renaming failed for any of them, roll the ones we have | ||||
| # already renamed back to their original names. | ||||
| if test -n "$failed" | ||||
| then | ||||
| 	rollback_failure= | ||||
| 	for file in $rollback | ||||
| 	do | ||||
| 		mv "$PACKDIR/old-$file" "$PACKDIR/$file" || | ||||
| 		rollback_failure="$rollback_failure $file" | ||||
| 	done | ||||
| 	if test -n "$rollback_failure" | ||||
| 	then | ||||
| 		echo >&2 "WARNING: Some packs in use have been renamed by" | ||||
| 		echo >&2 "WARNING: prefixing old- to their name, in order to" | ||||
| 		echo >&2 "WARNING: replace them with the new version of the" | ||||
| 		echo >&2 "WARNING: file.  But the operation failed, and" | ||||
| 		echo >&2 "WARNING: attempt to rename them back to their" | ||||
| 		echo >&2 "WARNING: original names also failed." | ||||
| 		echo >&2 "WARNING: Please rename them in $PACKDIR manually:" | ||||
| 		for file in $rollback_failure | ||||
| 		do | ||||
| 			echo >&2 "WARNING:   old-$file -> $file" | ||||
| 		done | ||||
| 	fi | ||||
| 	exit 1 | ||||
| fi | ||||
|  | ||||
| # Now the ones with the same name are out of the way... | ||||
| fullbases= | ||||
| for name in $names | ||||
| do | ||||
| 	fullbases="$fullbases pack-$name" | ||||
| 	chmod a-w "$PACKTMP-$name.pack" | ||||
| 	chmod a-w "$PACKTMP-$name.idx" | ||||
| 	mkdir -p "$PACKDIR" || exit | ||||
|  | ||||
| 	for sfx in pack idx | ||||
| 	do | ||||
| 		if test -f "$PACKDIR/pack-$name.$sfx" | ||||
| 		then | ||||
| 			mv -f "$PACKDIR/pack-$name.$sfx" \ | ||||
| 				"$PACKDIR/old-pack-$name.$sfx" | ||||
| 		fi | ||||
| 	done && | ||||
| 	mv -f "$PACKTMP-$name.pack" "$PACKDIR/pack-$name.pack" && | ||||
| 	mv -f "$PACKTMP-$name.idx"  "$PACKDIR/pack-$name.idx" && | ||||
| 	test -f "$PACKDIR/pack-$name.pack" && | ||||
| 	test -f "$PACKDIR/pack-$name.idx" || { | ||||
| 		echo >&2 "Couldn't replace the existing pack with updated one." | ||||
| 		echo >&2 "The original set of packs have been saved as" | ||||
| 		echo >&2 "old-pack-$name.{pack,idx} in $PACKDIR." | ||||
| 		exit 1 | ||||
| 	} | ||||
| 	rm -f "$PACKDIR/old-pack-$name.pack" "$PACKDIR/old-pack-$name.idx" | ||||
| 	mv -f "$PACKTMP-$name.idx"  "$PACKDIR/pack-$name.idx" || | ||||
| 	exit | ||||
| done | ||||
|  | ||||
| # Remove the "old-" files | ||||
| for name in $names | ||||
| do | ||||
| 	rm -f "$PACKDIR/old-pack-$name.idx" | ||||
| 	rm -f "$PACKDIR/old-pack-$name.pack" | ||||
| done | ||||
|  | ||||
| # End of pack replacement. | ||||
|  | ||||
| if test "$remove_redundant" = t | ||||
| then | ||||
| 	# We know $existing are all redundant. | ||||
|  |  | |||
|  | @ -689,6 +689,7 @@ void free_pack_by_name(const char *pack_name) | |||
| 	while (*pp) { | ||||
| 		p = *pp; | ||||
| 		if (strcmp(pack_name, p->pack_name) == 0) { | ||||
| 			clear_delta_base_cache(); | ||||
| 			close_pack_windows(p); | ||||
| 			if (p->pack_fd != -1) | ||||
| 				close(p->pack_fd); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano