git@vger.kernel.org list mirror (unofficial, one of many)
 help / color / Atom feed
07bcc80e02ce0367a616f159e3deb88ba7249389 blob 4513 bytes (raw)

  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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
 
#ifndef OBJECT_STORE_H
#define OBJECT_STORE_H

#include "oidmap.h"

struct alternate_object_database {
	struct alternate_object_database *next;

	/* see alt_scratch_buf() */
	struct strbuf scratch;
	size_t base_len;

	/*
	 * Used to store the results of readdir(3) calls when searching
	 * for unique abbreviated hashes.  This cache is never
	 * invalidated, thus it's racy and not necessarily accurate.
	 * That's fine for its purpose; don't use it for tasks requiring
	 * greater accuracy!
	 */
	char loose_objects_subdir_seen[256];
	struct oid_array loose_objects_cache;

	/*
	 * Path to the alternative object store. If this is a relative path,
	 * it is relative to the current working directory.
	 */
	char path[FLEX_ARRAY];
};
void prepare_alt_odb(struct repository *r);
char *compute_alternate_path(const char *path, struct strbuf *err);
typedef int alt_odb_fn(struct alternate_object_database *, void *);
int foreach_alt_odb(alt_odb_fn, void*);

/*
 * Allocate a "struct alternate_object_database" but do _not_ actually
 * add it to the list of alternates.
 */
struct alternate_object_database *alloc_alt_odb(const char *dir);

/*
 * Add the directory to the on-disk alternates file; the new entry will also
 * take effect in the current process.
 */
void add_to_alternates_file(const char *dir);

/*
 * Add the directory to the in-memory list of alternates (along with any
 * recursive alternates it points to), but do not modify the on-disk alternates
 * file.
 */
void add_to_alternates_memory(const char *dir);

/*
 * Returns a scratch strbuf pre-filled with the alternate object directory,
 * including a trailing slash, which can be used to access paths in the
 * alternate. Always use this over direct access to alt->scratch, as it
 * cleans up any previous use of the scratch buffer.
 */
struct strbuf *alt_scratch_buf(struct alternate_object_database *alt);

struct packed_git {
	struct packed_git *next;
	struct list_head mru;
	struct pack_window *windows;
	off_t pack_size;
	const void *index_data;
	size_t index_size;
	uint32_t num_objects;
	uint32_t num_bad_objects;
	unsigned char *bad_object_sha1;
	int index_version;
	time_t mtime;
	int pack_fd;
	int index;              /* for builtin/pack-objects.c */
	unsigned pack_local:1,
		 pack_keep:1,
		 pack_keep_in_core:1,
		 freshened:1,
		 do_not_close:1,
		 pack_promisor:1;
	unsigned char sha1[20];
	struct revindex_entry *revindex;
	/* something like ".git/objects/pack/xxxxx.pack" */
	char pack_name[FLEX_ARRAY]; /* more */
};

struct multi_pack_index {
	int fd;

	const unsigned char *data;
	size_t data_len;

	uint32_t signature;
	unsigned char version;
	unsigned char hash_len;
	unsigned char num_chunks;
	uint32_t num_packs;
	uint32_t num_objects;

	const unsigned char *chunk_pack_names;
	const uint32_t *chunk_oid_fanout;
	const unsigned char *chunk_oid_lookup;
	const unsigned char *chunk_object_offsets;
	const unsigned char *chunk_large_offsets;

	const char **pack_names;
	char object_dir[FLEX_ARRAY];
};

struct raw_object_store {
	/*
	 * Path to the repository's object store.
	 * Cannot be NULL after initialization.
	 */
	char *objectdir;

	/* Path to extra alternate object database if not NULL */
	char *alternate_db;

	struct alternate_object_database *alt_odb_list;
	struct alternate_object_database **alt_odb_tail;

	/*
	 * Objects that should be substituted by other objects
	 * (see git-replace(1)).
	 */
	struct oidmap *replace_map;

	/*
	 * private data
	 *
	 * should only be accessed directly by packfile.c
	 */

	struct packed_git *packed_git;
	/* A most-recently-used ordered version of the packed_git list. */
	struct list_head packed_git_mru;

	/*
	 * A fast, rough count of the number of objects in the repository.
	 * These two fields are not meant for direct access. Use
	 * approximate_object_count() instead.
	 */
	unsigned long approximate_object_count;
	unsigned approximate_object_count_valid : 1;

	/*
	 * Whether packed_git has already been populated with this repository's
	 * packs.
	 */
	unsigned packed_git_initialized : 1;
};

struct raw_object_store *raw_object_store_new(void);
void raw_object_store_clear(struct raw_object_store *o);

/*
 * Put in `buf` the name of the file in the local object database that
 * would be used to store a loose object with the specified sha1.
 */
void sha1_file_name(struct repository *r, struct strbuf *buf, const unsigned char *sha1);

void *map_sha1_file(struct repository *r, const unsigned char *sha1, unsigned long *size);

#endif /* OBJECT_STORE_H */
debug log:

solving 07bcc80e02 ...
found 07bcc80e02 in https://public-inbox.org/git/20180625143434.89044-16-dstolee@microsoft.com/
found 3357e51100 in https://public-inbox.org/git/20180706005321.124643-15-dstolee@microsoft.com/
found 25f8530eb4 in https://public-inbox.org/git/20180706005321.124643-14-dstolee@microsoft.com/
found 88169b33e9 in https://public-inbox.org/git/20180706005321.124643-12-dstolee@microsoft.com/
found c87d051849 in https://public-inbox.org/git/20180706005321.124643-11-dstolee@microsoft.com/
found 4f410841cc in https://public-inbox.org/git/20180625143434.89044-7-dstolee@microsoft.com/
found d683112fd7 in https://80x24.org/mirrors/git.git
preparing index
index prepared:
100644 d683112fd7bbab5df7e8cd5656b497cb8fd2bda1	object-store.h

applying [1/6] https://public-inbox.org/git/20180625143434.89044-7-dstolee@microsoft.com/
diff --git a/object-store.h b/object-store.h
index d683112fd7..4f410841cc 100644


applying [2/6] https://public-inbox.org/git/20180706005321.124643-11-dstolee@microsoft.com/
diff --git a/object-store.h b/object-store.h
index 4f410841cc..c87d051849 100644


applying [3/6] https://public-inbox.org/git/20180706005321.124643-12-dstolee@microsoft.com/
diff --git a/object-store.h b/object-store.h
index c87d051849..88169b33e9 100644


applying [4/6] https://public-inbox.org/git/20180706005321.124643-14-dstolee@microsoft.com/
diff --git a/object-store.h b/object-store.h
index 88169b33e9..25f8530eb4 100644


applying [5/6] https://public-inbox.org/git/20180706005321.124643-15-dstolee@microsoft.com/
diff --git a/object-store.h b/object-store.h
index 25f8530eb4..3357e51100 100644


applying [6/6] https://public-inbox.org/git/20180625143434.89044-16-dstolee@microsoft.com/
diff --git a/object-store.h b/object-store.h
index 3357e51100..07bcc80e02 100644

Checking patch object-store.h...
Applied patch object-store.h cleanly.
Checking patch object-store.h...
Applied patch object-store.h cleanly.
Checking patch object-store.h...
Applied patch object-store.h cleanly.
Checking patch object-store.h...
Applied patch object-store.h cleanly.
Checking patch object-store.h...
Applied patch object-store.h cleanly.
Checking patch object-store.h...
Applied patch object-store.h cleanly.

index at:
100644 07bcc80e02ce0367a616f159e3deb88ba7249389	object-store.h

git@vger.kernel.org list mirror (unofficial, one of many)

Archives are clonable:
	git clone --mirror https://public-inbox.org/git
	git clone --mirror http://ou63pmih66umazou.onion/git
	git clone --mirror http://czquwvybam4bgbro.onion/git
	git clone --mirror http://hjrcffqmbrq6wope.onion/git

Newsgroups are available over NNTP:
	nntp://news.public-inbox.org/inbox.comp.version-control.git
	nntp://ou63pmih66umazou.onion/inbox.comp.version-control.git
	nntp://czquwvybam4bgbro.onion/inbox.comp.version-control.git
	nntp://hjrcffqmbrq6wope.onion/inbox.comp.version-control.git
	nntp://news.gmane.org/gmane.comp.version-control.git

 note: .onion URLs require Tor: https://www.torproject.org/

AGPL code for this site: git clone https://public-inbox.org/ public-inbox