refs.h 13.7 KB
Newer Older
D
Daniel Barkalow 已提交
1 2 3
#ifndef REFS_H
#define REFS_H

4
struct ref_lock {
5
	char *ref_name;
6
	char *orig_ref_name;
7
	struct lock_file *lk;
8 9
	unsigned char old_sha1[20];
	int lock_fd;
10
	int force_write;
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
/*
 * A ref_transaction represents a collection of ref updates
 * that should succeed or fail together.
 *
 * Calling sequence
 * ----------------
 * - Allocate and initialize a `struct ref_transaction` by calling
 *   `ref_transaction_begin()`.
 *
 * - List intended ref updates by calling functions like
 *   `ref_transaction_update()` and `ref_transaction_create()`.
 *
 * - Call `ref_transaction_commit()` to execute the transaction.
 *   If this succeeds, the ref updates will have taken place and
 *   the transaction cannot be rolled back.
 *
 * - At any time call `ref_transaction_free()` to discard the
 *   transaction and free associated resources.  In particular,
 *   this rolls back the transaction if it has not been
 *   successfully committed.
 *
 * Error handling
 * --------------
 *
 * On error, transaction functions append a message about what
 * went wrong to the 'err' argument.  The message mentions what
 * ref was being updated (if any) when the error occurred so it
 * can be passed to 'die' or 'error' as-is.
 *
 * The message is appended to err without first clearing err.
 * err will not be '\n' terminated.
 */
45 46
struct ref_transaction;

47 48 49 50 51
/*
 * Bit values set in the flags argument passed to each_ref_fn():
 */

/* Reference is a symbolic reference. */
52
#define REF_ISSYMREF 0x01
53 54

/* Reference is a packed reference. */
55
#define REF_ISPACKED 0x02
56 57 58

/*
 * Reference cannot be resolved to an object name: dangling symbolic
59 60 61
 * reference (directly or indirectly), corrupt reference file,
 * reference exists but name is bad, or symbolic reference refers to
 * ill-formatted reference name.
62
 */
63
#define REF_ISBROKEN 0x04
64

65 66 67 68 69 70 71
/*
 * Reference name is not well formed.
 *
 * See git-check-ref-format(1) for the definition of well formed ref names.
 */
#define REF_BAD_NAME 0x08

72
/*
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
 * The signature for the callback function for the for_each_*()
 * functions below.  The memory pointed to by the refname and sha1
 * arguments is only guaranteed to be valid for the duration of a
 * single callback invocation.
 */
typedef int each_ref_fn(const char *refname,
			const unsigned char *sha1, int flags, void *cb_data);

/*
 * The following functions invoke the specified callback function for
 * each reference indicated.  If the function ever returns a nonzero
 * value, stop the iteration and return that value.  Please note that
 * it is not safe to modify references while an iteration is in
 * progress, unless the same callback function invocation that
 * modifies the reference also returns a nonzero value to immediately
 * stop the iteration.
89
 */
90 91
extern int head_ref(each_ref_fn, void *);
extern int for_each_ref(each_ref_fn, void *);
92
extern int for_each_ref_in(const char *, each_ref_fn, void *);
93 94 95
extern int for_each_tag_ref(each_ref_fn, void *);
extern int for_each_branch_ref(each_ref_fn, void *);
extern int for_each_remote_ref(each_ref_fn, void *);
96
extern int for_each_replace_ref(each_ref_fn, void *);
I
Ilari Liusvaara 已提交
97
extern int for_each_glob_ref(each_ref_fn, const char *pattern, void *);
98
extern int for_each_glob_ref_in(each_ref_fn, const char *pattern, const char* prefix, void *);
99

100 101 102 103 104 105 106 107
extern int head_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data);
extern int for_each_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data);
extern int for_each_ref_in_submodule(const char *submodule, const char *prefix,
		each_ref_fn fn, void *cb_data);
extern int for_each_tag_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data);
extern int for_each_branch_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data);
extern int for_each_remote_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data);

J
Josh Triplett 已提交
108 109 110
extern int head_ref_namespaced(each_ref_fn fn, void *cb_data);
extern int for_each_namespaced_ref(each_ref_fn fn, void *cb_data);

111 112 113 114 115
static inline const char *has_glob_specials(const char *pattern)
{
	return strpbrk(pattern, "?*[");
}

116 117 118
/* can be used to learn about broken ref and symref */
extern int for_each_rawref(each_ref_fn, void *);

119
extern void warn_dangling_symref(FILE *fp, const char *msg_fmt, const char *refname);
120
extern void warn_dangling_symrefs(FILE *fp, const char *msg_fmt, const struct string_list *refnames);
121

122
/*
123 124
 * Lock the packed-refs file for writing.  Flags is passed to
 * hold_lock_file_for_update().  Return 0 on success.
125
 * Errno is set to something meaningful on error.
126 127 128 129 130 131 132 133
 */
extern int lock_packed_refs(int flags);

/*
 * Add a reference to the in-memory packed reference cache.  This may
 * only be called while the packed-refs file is locked (see
 * lock_packed_refs()).  To actually write the packed-refs file, call
 * commit_packed_refs().
134 135 136
 */
extern void add_packed_ref(const char *refname, const unsigned char *sha1);

137 138 139 140
/*
 * Write the current version of the packed refs cache from memory to
 * disk.  The packed-refs file must already be locked for writing (see
 * lock_packed_refs()).  Return zero on success.
141
 * Sets errno to something meaningful on error.
142 143 144 145 146 147 148 149 150 151
 */
extern int commit_packed_refs(void);

/*
 * Rollback the lockfile for the packed-refs file, and discard the
 * in-memory packed reference cache.  (The packed-refs file will be
 * read anew if it is needed again after this function is called.)
 */
extern void rollback_packed_refs(void);

152 153 154 155 156 157 158 159 160 161 162 163 164 165
/*
 * Flags for controlling behaviour of pack_refs()
 * PACK_REFS_PRUNE: Prune loose refs after packing
 * PACK_REFS_ALL:   Pack _all_ refs, not just tags and already packed refs
 */
#define PACK_REFS_PRUNE 0x0001
#define PACK_REFS_ALL   0x0002

/*
 * Write a packed-refs file for the current repository.
 * flags: Combination of the above PACK_REFS_* flags.
 */
int pack_refs(unsigned int flags);

166 167
extern int repack_without_refs(const char **refnames, int n,
			       struct strbuf *err);
168

169
extern int ref_exists(const char *);
170

171 172
extern int is_branch(const char *refname);

173 174 175 176 177 178 179 180
/*
 * If refname is a non-symbolic reference that refers to a tag object,
 * and the tag can be (recursively) dereferenced to a non-tag object,
 * store the SHA1 of the referred-to object to sha1 and return 0.  If
 * any of these conditions are not met, return a non-zero value.
 * Symbolic references are considered unpeelable, even if they
 * ultimately resolve to a peelable tag.
 */
181
extern int peel_ref(const char *refname, unsigned char *sha1);
182

183
/*
184
 * Flags controlling ref_transaction_update(), ref_transaction_create(), etc.
185 186
 * REF_NODEREF: act on the ref directly, instead of dereferencing
 *              symbolic references.
187
 * REF_DELETING: tolerate broken refs
188 189
 *
 * Flags >= 0x100 are reserved for internal use.
190
 */
191
#define REF_NODEREF	0x01
192
#define REF_DELETING	0x02
D
Daniel Barkalow 已提交
193

194 195 196
/*
 * Setup reflog before using. Set errno to something meaningful on failure.
 */
197
int log_ref_setup(const char *refname, char *logfile, int bufsize);
198

199
/** Reads log for the value of ref during at_time. **/
200 201
extern int read_ref_at(const char *refname, unsigned int flags,
		       unsigned long at_time, int cnt,
202 203
		       unsigned char *sha1, char **msg,
		       unsigned long *cutoff_time, int *cutoff_tz, int *cutoff_cnt);
204

205 206 207 208 209 210
/** Check if a particular reflog exists */
extern int reflog_exists(const char *refname);

/** Delete a reflog */
extern int delete_reflog(const char *refname);

211
/* iterate over reflog entries */
212
typedef int each_reflog_ent_fn(unsigned char *osha1, unsigned char *nsha1, const char *, unsigned long, int, const char *, void *);
213
int for_each_reflog_ent(const char *refname, each_reflog_ent_fn fn, void *cb_data);
214
int for_each_reflog_ent_reverse(const char *refname, each_reflog_ent_fn fn, void *cb_data);
215

216 217 218 219 220 221
/*
 * Calls the specified function for each reflog file until it returns nonzero,
 * and returns the value
 */
extern int for_each_reflog(each_ref_fn, void *);

222 223 224 225
#define REFNAME_ALLOW_ONELEVEL 1
#define REFNAME_REFSPEC_PATTERN 2

/*
226 227 228
 * Return 0 iff refname has the correct format for a refname according
 * to the rules described in Documentation/git-check-ref-format.txt.
 * If REFNAME_ALLOW_ONELEVEL is set in flags, then accept one-level
229 230
 * reference names.  If REFNAME_REFSPEC_PATTERN is set in flags, then
 * allow a "*" wildcard character in place of one of the name
231
 * components.  No leading or repeated slashes are accepted.
232
 */
233
extern int check_refname_format(const char *refname, int flags);
D
Daniel Barkalow 已提交
234

235
extern const char *prettify_refname(const char *refname);
236
extern char *shorten_unambiguous_ref(const char *refname, int strict);
237

238
/** rename ref, return 0 on success **/
239
extern int rename_ref(const char *oldref, const char *newref, const char *logmsg);
240

241 242 243 244 245 246
/**
 * Resolve refname in the nested "gitlink" repository that is located
 * at path.  If the resolution is successful, return 0 and set sha1 to
 * the name of the object; otherwise, return a non-zero value.
 */
extern int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *sha1);
247

248 249 250 251 252 253
enum action_on_err {
	UPDATE_REFS_MSG_ON_ERR,
	UPDATE_REFS_DIE_ON_ERR,
	UPDATE_REFS_QUIET_ON_ERR
};

254 255
/*
 * Begin a reference transaction.  The reference transaction must
256
 * be freed by calling ref_transaction_free().
257
 */
258
struct ref_transaction *ref_transaction_begin(struct strbuf *err);
259 260 261 262 263

/*
 * The following functions add a reference check or update to a
 * ref_transaction.  In all of them, refname is the name of the
 * reference to be affected.  The functions make internal copies of
264 265
 * refname and msg, so the caller retains ownership of these parameters.
 * flags can be REF_NODEREF; it is passed to update_ref_lock().
266 267 268 269
 */

/*
 * Add a reference update to transaction.  new_sha1 is the value that
270
 * the reference should have after the update, or null_sha1 if it should
271 272 273
 * be deleted.  If have_old is true, then old_sha1 holds the value
 * that the reference should have had before the update, or zeros if
 * it must not have existed beforehand.
274 275
 * Function returns 0 on success and non-zero on failure. A failure to update
 * means that the transaction as a whole has failed and will need to be
276
 * rolled back.
277
 */
278 279 280 281
int ref_transaction_update(struct ref_transaction *transaction,
			   const char *refname,
			   const unsigned char *new_sha1,
			   const unsigned char *old_sha1,
282
			   int flags, int have_old, const char *msg,
283
			   struct strbuf *err);
284 285 286 287 288 289

/*
 * Add a reference creation to transaction.  new_sha1 is the value
 * that the reference should have after the update; it must not be the
 * null SHA-1.  It is verified that the reference does not exist
 * already.
290 291 292
 * Function returns 0 on success and non-zero on failure. A failure to create
 * means that the transaction as a whole has failed and will need to be
 * rolled back.
293
 */
294 295 296
int ref_transaction_create(struct ref_transaction *transaction,
			   const char *refname,
			   const unsigned char *new_sha1,
297
			   int flags, const char *msg,
298
			   struct strbuf *err);
299 300 301 302 303

/*
 * Add a reference deletion to transaction.  If have_old is true, then
 * old_sha1 holds the value that the reference should have had before
 * the update (which must not be the null SHA-1).
304 305 306
 * Function returns 0 on success and non-zero on failure. A failure to delete
 * means that the transaction as a whole has failed and will need to be
 * rolled back.
307
 */
308 309 310
int ref_transaction_delete(struct ref_transaction *transaction,
			   const char *refname,
			   const unsigned char *old_sha1,
311
			   int flags, int have_old, const char *msg,
312
			   struct strbuf *err);
313 314 315

/*
 * Commit all of the changes that have been queued in transaction, as
316 317 318
 * atomically as possible.
 *
 * Returns 0 for success, or one of the below error codes for errors.
319
 */
320 321 322 323
/* Naming conflict (for example, the ref names A and A/B conflict). */
#define TRANSACTION_NAME_CONFLICT -1
/* All other errors. */
#define TRANSACTION_GENERIC_ERROR -2
324
int ref_transaction_commit(struct ref_transaction *transaction,
325
			   struct strbuf *err);
326

327 328 329 330 331
/*
 * Free an existing transaction and all associated data.
 */
void ref_transaction_free(struct ref_transaction *transaction);

332
/** Lock a ref and then write its file */
C
Carlos Rica 已提交
333 334 335 336
int update_ref(const char *action, const char *refname,
		const unsigned char *sha1, const unsigned char *oldval,
		int flags, enum action_on_err onerr);

337 338 339
extern int parse_hide_refs_config(const char *var, const char *value, const char *);
extern int ref_is_hidden(const char *);

340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385
enum expire_reflog_flags {
	EXPIRE_REFLOGS_DRY_RUN = 1 << 0,
	EXPIRE_REFLOGS_UPDATE_REF = 1 << 1,
	EXPIRE_REFLOGS_VERBOSE = 1 << 2,
	EXPIRE_REFLOGS_REWRITE = 1 << 3
};

/*
 * The following interface is used for reflog expiration. The caller
 * calls reflog_expire(), supplying it with three callback functions,
 * of the following types. The callback functions define the
 * expiration policy that is desired.
 *
 * reflog_expiry_prepare_fn -- Called once after the reference is
 *     locked.
 *
 * reflog_expiry_should_prune_fn -- Called once for each entry in the
 *     existing reflog. It should return true iff that entry should be
 *     pruned.
 *
 * reflog_expiry_cleanup_fn -- Called once before the reference is
 *     unlocked again.
 */
typedef void reflog_expiry_prepare_fn(const char *refname,
				      const unsigned char *sha1,
				      void *cb_data);
typedef int reflog_expiry_should_prune_fn(unsigned char *osha1,
					  unsigned char *nsha1,
					  const char *email,
					  unsigned long timestamp, int tz,
					  const char *message, void *cb_data);
typedef void reflog_expiry_cleanup_fn(void *cb_data);

/*
 * Expire reflog entries for the specified reference. sha1 is the old
 * value of the reference. flags is a combination of the constants in
 * enum expire_reflog_flags. The three function pointers are described
 * above. On success, return zero.
 */
extern int reflog_expire(const char *refname, const unsigned char *sha1,
			 unsigned int flags,
			 reflog_expiry_prepare_fn prepare_fn,
			 reflog_expiry_should_prune_fn should_prune_fn,
			 reflog_expiry_cleanup_fn cleanup_fn,
			 void *policy_cb_data);

D
Daniel Barkalow 已提交
386
#endif /* REFS_H */