Revision abfef3bbf5f637c86032763632393ce1ffd23ccc authored by Jakob Stoklund Olesen on 17 April 2014, 06:54:05 UTC, committed by Eric Wong on 24 October 2014, 22:55:26 UTC
In a Subversion repository where many feature branches are merged into a
trunk, the svn:mergeinfo property can grow very large. This severely
slows down git-svn's make_log_entry() because it is checking all
mergeinfo entries every time the property changes.

In most cases, the additions to svn:mergeinfo since the last commit are
pretty small, and there is nothing to gain by checking merges that were
already checked for the last commit in the branch.

Add a mergeinfo_changes() function which computes the set of interesting
changes to svn:mergeinfo since the last commit. Filter out merged
branches whose ranges haven't changed, and remove a common prefix of
ranges from other merged branches.

This speeds up "git svn fetch" by several orders of magnitude on a large
repository where thousands of feature branches have been merged.

Signed-off-by: Jakob Stoklund Olesen <stoklund@2pi.dk>
Signed-off-by: Eric Wong <normalperson@yhbt.net>
1 parent fbecd99
Raw File
userdiff.h
#ifndef USERDIFF_H
#define USERDIFF_H

#include "notes-cache.h"

struct userdiff_funcname {
	const char *pattern;
	int cflags;
};

struct userdiff_driver {
	const char *name;
	const char *external;
	int binary;
	struct userdiff_funcname funcname;
	const char *word_regex;
	const char *textconv;
	struct notes_cache *textconv_cache;
	int textconv_want_cache;
};

int userdiff_config(const char *k, const char *v);
struct userdiff_driver *userdiff_find_by_name(const char *name);
struct userdiff_driver *userdiff_find_by_path(const char *path);

struct userdiff_driver *userdiff_get_textconv(struct userdiff_driver *driver);

#endif /* USERDIFF */
back to top