Thread (26 messages) flat view 26 messages, 5 authors, 2018-08-06

Re: [RFC PATCH 2/5] Add delta-islands.{c,h}

From: Duy Nguyen <hidden>
Date: 2018-07-22 08:52:24

On Sun, Jul 22, 2018 at 7:51 AM Christian Couder
[off-list ref] wrote:
quoted hunk ↗ jump to hunk
diff --git a/Documentation/config.txt b/Documentation/config.txt
index a32172a43c..f682e92a1a 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -2542,6 +2542,10 @@ Note that changing the compression level will not automatically recompress
 all existing objects. You can force recompression by passing the -F option
 to linkgit:git-repack[1].

+pack.island::
+       A regular expression configuring a set of delta islands. See
+       "DELTA ISLANDS" in linkgit:git-pack-objects[1] for details.
+
That section is not added until 3/5 though.
quoted hunk ↗ jump to hunk
diff --git a/delta-islands.c b/delta-islands.c
new file mode 100644
index 0000000000..645fe966c5
--- /dev/null
+++ b/delta-islands.c
@@ -0,0 +1,490 @@
+#include "builtin.h"
A bit weird that builtin.h would be needed...
+void resolve_tree_islands(int progress, struct packing_data *to_pack)
+{
+       struct progress *progress_state = NULL;
+       struct object_entry **todo;
+       int nr = 0;
+       int i;
+
+       if (!island_marks)
+               return;
+
+       /*
+        * We process only trees, as commits and tags have already been handled
+        * (and passed their marks on to root trees, as well. We must make sure
+        * to process them in descending tree-depth order so that marks
+        * propagate down the tree properly, even if a sub-tree is found in
+        * multiple parent trees.
+        */
+       todo = xmalloc(to_pack->nr_objects * sizeof(*todo));
+       for (i = 0; i < to_pack->nr_objects; i++) {
+               if (oe_type(&to_pack->objects[i]) == OBJ_TREE)
+                       todo[nr++] = &to_pack->objects[i];
+       }
+       qsort(todo, nr, sizeof(*todo), cmp_tree_depth);
+
+       if (progress)
+               progress_state = start_progress("Propagating island marks", nr);
_() (same comment for other strings too)
quoted hunk ↗ jump to hunk
diff --git a/pack-objects.h b/pack-objects.h
index edf74dabdd..8eecd67991 100644
--- a/pack-objects.h
+++ b/pack-objects.h
@@ -100,6 +100,10 @@ struct object_entry {
        unsigned type_:TYPE_BITS;
        unsigned no_try_delta:1;
        unsigned in_pack_type:TYPE_BITS; /* could be delta */
+
+       unsigned int tree_depth; /* should be repositioned for packing? */
+       unsigned char layer;
+
This looks very much like an optional feature. To avoid increasing
pack-objects memory usage for common case, please move this to struct
packing_data.
        unsigned preferred_base:1; /*
                                    * we do not pack this, but is available
                                    * to be used as the base object to delta
--
2.18.0.237.gffdb1dbdaa
-- 
Duy
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help