diffcore-rename: split out the delta counting code.
[git.git] / diffcore-delta.c
diff --git a/diffcore-delta.c b/diffcore-delta.c
new file mode 100644 (file)
index 0000000..1e6a691
--- /dev/null
@@ -0,0 +1,43 @@
+#include "cache.h"
+#include "diff.h"
+#include "diffcore.h"
+#include "delta.h"
+#include "count-delta.h"
+
+static int diffcore_count_changes_1(void *src, unsigned long src_size,
+                                   void *dst, unsigned long dst_size,
+                                   unsigned long delta_limit,
+                                   unsigned long *src_copied,
+                                   unsigned long *literal_added)
+{
+       void *delta;
+       unsigned long delta_size;
+
+       delta = diff_delta(src, src_size,
+                          dst, dst_size,
+                          &delta_size, delta_limit);
+       if (!delta)
+               /* If delta_limit is exceeded, we have too much differences */
+               return -1;
+
+       /* Estimate the edit size by interpreting delta. */
+       if (count_delta(delta, delta_size, src_copied, literal_added)) {
+               free(delta);
+               return -1;
+       }
+       free(delta);
+       return 0;
+}
+
+int diffcore_count_changes(void *src, unsigned long src_size,
+                          void *dst, unsigned long dst_size,
+                          unsigned long delta_limit,
+                          unsigned long *src_copied,
+                          unsigned long *literal_added)
+{
+       return diffcore_count_changes_1(src, src_size,
+                                       dst, dst_size,
+                                       delta_limit,
+                                       src_copied,
+                                       literal_added);
+}