git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
blob ec4eba4ee4c7b8e16129949a4b57f254586b8833 2880 bytes (raw)
name: pack-objects.h 	 # note: path name is non-authoritative(*)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
 
#ifndef PACK_OBJECTS_H
#define PACK_OBJECTS_H

#define OE_DFS_STATE_BITS 2
#define OE_DEPTH_BITS 12
#define OE_IN_PACK_BITS 12

#define IN_PACK_POS(to_pack, obj) \
	(to_pack)->in_pack_pos[(struct object_entry *)(obj) - (to_pack)->objects]

#define IN_PACK(to_pack, obj) \
	(to_pack)->in_pack[(obj)->in_pack_idx]

/*
 * State flags for depth-first search used for analyzing delta cycles.
 *
 * The depth is measured in delta-links to the base (so if A is a delta
 * against B, then A has a depth of 1, and B a depth of 0).
 */
enum dfs_state {
	DFS_NONE = 0,
	DFS_ACTIVE,
	DFS_DONE,
	DFS_NUM_STATES
};

/*
 * The size of struct nearly determines pack-objects's memory
 * consumption. This struct is packed tight for that reason. When you
 * add or reorder something in this struct, think a bit about this.
 */
struct object_entry {
	struct pack_idx_entry idx;
	unsigned long size;	/* uncompressed size */
	off_t in_pack_offset;
	uint32_t delta_idx;	/* delta base object */
	uint32_t delta_child_idx; /* deltified objects who bases me */
	uint32_t delta_sibling_idx; /* other deltified objects who
				     * uses the same base as me
				     */
	uint32_t hash;			/* name hint hash */
	void *delta_data;	/* cached delta (uncompressed) */
	unsigned long delta_size;	/* delta data size (uncompressed) */
	unsigned long z_delta_size;	/* delta data size (compressed) */
	unsigned char in_pack_header_size; /* note: spare bits available! */
	unsigned in_pack_idx:OE_IN_PACK_BITS;	/* already in pack */
	unsigned type:TYPE_BITS;
	unsigned in_pack_type:TYPE_BITS; /* could be delta */
	unsigned preferred_base:1; /*
				    * we do not pack this, but is available
				    * to be used as the base object to delta
				    * objects against.
				    */
	unsigned no_try_delta:1;
	unsigned tagged:1; /* near the very tip of refs */
	unsigned filled:1; /* assigned write-order */
	unsigned dfs_state:OE_DFS_STATE_BITS;

	/* XXX 8 bits hole, try to pack */

	unsigned depth:OE_DEPTH_BITS;

	/* size: 96 */
};

struct packing_data {
	struct object_entry *objects;
	uint32_t nr_objects, nr_alloc;

	int32_t *index;
	uint32_t index_size;

	unsigned int *in_pack_pos;
	struct packed_git *in_pack[1 << OE_IN_PACK_BITS];
};

struct object_entry *packlist_alloc(struct packing_data *pdata,
				    const unsigned char *sha1,
				    uint32_t index_pos);

struct object_entry *packlist_find(struct packing_data *pdata,
				   const unsigned char *sha1,
				   uint32_t *index_pos);

static inline uint32_t pack_name_hash(const char *name)
{
	uint32_t c, hash = 0;

	if (!name)
		return 0;

	/*
	 * This effectively just creates a sortable number from the
	 * last sixteen non-whitespace characters. Last characters
	 * count "most", so things that end in ".c" sort together.
	 */
	while ((c = *name++) != 0) {
		if (isspace(c))
			continue;
		hash = (hash >> 2) + (c << 24);
	}
	return hash;
}

#endif

debug log:

solving ec4eba4ee4 ...
found ec4eba4ee4 in https://public-inbox.org/git/20180301091052.32267-12-pclouds@gmail.com/
found 52087b32e5 in https://public-inbox.org/git/20180301091052.32267-11-pclouds@gmail.com/
found f339f0411a in https://public-inbox.org/git/20180301091052.32267-10-pclouds@gmail.com/
found 839d5dc4fd in https://public-inbox.org/git/20180301091052.32267-8-pclouds@gmail.com/
found 3bef28196c in https://public-inbox.org/git/20180301091052.32267-7-pclouds@gmail.com/
found 017cc3425f in https://public-inbox.org/git/20180301091052.32267-6-pclouds@gmail.com/
found 3941e6c9a6 in https://public-inbox.org/git/20180301091052.32267-5-pclouds@gmail.com/
found fca334ab4d in https://public-inbox.org/git/20180301091052.32267-4-pclouds@gmail.com/
found f8b06e2521 in https://public-inbox.org/git/20180301091052.32267-3-pclouds@gmail.com/ ||
	https://public-inbox.org/git/20180303024706.31465-3-pclouds@gmail.com/
found 720a8e8756 in https://public-inbox.org/git/20180303024706.31465-2-pclouds@gmail.com/ ||
	https://public-inbox.org/git/20180301091052.32267-2-pclouds@gmail.com/
found 03f1191659 in https://80x24.org/mirrors/git.git
preparing index
index prepared:
100644 03f1191659dab55b2c4c440c347101a3cdbd4650	pack-objects.h

applying [1/10] https://public-inbox.org/git/20180303024706.31465-2-pclouds@gmail.com/
diff --git a/pack-objects.h b/pack-objects.h
index 03f1191659..720a8e8756 100644

Checking patch pack-objects.h...
Applied patch pack-objects.h cleanly.

skipping https://public-inbox.org/git/20180301091052.32267-2-pclouds@gmail.com/ for 720a8e8756
index at:
100644 720a8e8756430dbea8e1702323d5c99feb25e83a	pack-objects.h

applying [2/10] https://public-inbox.org/git/20180301091052.32267-3-pclouds@gmail.com/
diff --git a/pack-objects.h b/pack-objects.h
index 720a8e8756..f8b06e2521 100644

Checking patch pack-objects.h...
Applied patch pack-objects.h cleanly.

skipping https://public-inbox.org/git/20180303024706.31465-3-pclouds@gmail.com/ for f8b06e2521
index at:
100644 f8b06e2521161f72ebcc1768209a112960cc3f2e	pack-objects.h

applying [3/10] https://public-inbox.org/git/20180301091052.32267-4-pclouds@gmail.com/
diff --git a/pack-objects.h b/pack-objects.h
index f8b06e2521..fca334ab4d 100644


applying [4/10] https://public-inbox.org/git/20180301091052.32267-5-pclouds@gmail.com/
diff --git a/pack-objects.h b/pack-objects.h
index fca334ab4d..3941e6c9a6 100644


applying [5/10] https://public-inbox.org/git/20180301091052.32267-6-pclouds@gmail.com/
diff --git a/pack-objects.h b/pack-objects.h
index 3941e6c9a6..017cc3425f 100644


applying [6/10] https://public-inbox.org/git/20180301091052.32267-7-pclouds@gmail.com/
diff --git a/pack-objects.h b/pack-objects.h
index 017cc3425f..3bef28196c 100644


applying [7/10] https://public-inbox.org/git/20180301091052.32267-8-pclouds@gmail.com/
diff --git a/pack-objects.h b/pack-objects.h
index 3bef28196c..839d5dc4fd 100644


applying [8/10] https://public-inbox.org/git/20180301091052.32267-10-pclouds@gmail.com/
diff --git a/pack-objects.h b/pack-objects.h
index 839d5dc4fd..f339f0411a 100644


applying [9/10] https://public-inbox.org/git/20180301091052.32267-11-pclouds@gmail.com/
diff --git a/pack-objects.h b/pack-objects.h
index f339f0411a..52087b32e5 100644


applying [10/10] https://public-inbox.org/git/20180301091052.32267-12-pclouds@gmail.com/
diff --git a/pack-objects.h b/pack-objects.h
index 52087b32e5..ec4eba4ee4 100644

Checking patch pack-objects.h...
Applied patch pack-objects.h cleanly.
Checking patch pack-objects.h...
Applied patch pack-objects.h cleanly.
Checking patch pack-objects.h...
Applied patch pack-objects.h cleanly.
Checking patch pack-objects.h...
Applied patch pack-objects.h cleanly.
Checking patch pack-objects.h...
Applied patch pack-objects.h cleanly.
Checking patch pack-objects.h...
Applied patch pack-objects.h cleanly.
Checking patch pack-objects.h...
Applied patch pack-objects.h cleanly.
Checking patch pack-objects.h...
Applied patch pack-objects.h cleanly.

index at:
100644 ec4eba4ee4c7b8e16129949a4b57f254586b8833	pack-objects.h

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).