refs: add ref_type function
Add a function ref_type, which categorizes refs as per-worktree, pseudoref, or normal ref. Later, we will use this in refs.c to treat pseudorefs specially. Alternate ref backends may use it to treat both pseudorefs and per-worktree refs differently. Signed-off-by: David Turner <dturner@twopensource.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
David Turner committed
Jul 31, 2015 at 02:06 UTC
266b18273a742a33970e634d1858f292befdf943
2 files changed
+34
refs.c
+26
@@ -2821,6 +2821,32 @@ static int delete_ref_loose(struct ref_lock *lock, int flag, struct strbuf *err)
2821
return 0;
2822
}
2823
2824
+static int is_per_worktree_ref(const char *refname)
2825
+{
2826
+ return !strcmp(refname, "HEAD");
2827
+}
2828
+
2829
+static int is_pseudoref_syntax(const char *refname)
2830
+{
2831
+ const char *c;
2832
+
2833
+ for (c = refname; *c; c++) {
2834
+ if (!isupper(*c) && *c != '-' && *c != '_')
2835
+ return 0;
2836
+ }
2837
+
2838
+ return 1;
2839
+}
2840
+
2841
+enum ref_type ref_type(const char *refname)
2842
+{
2843
+ if (is_per_worktree_ref(refname))
2844
+ return REF_TYPE_PER_WORKTREE;
2845
+ if (is_pseudoref_syntax(refname))
2846
+ return REF_TYPE_PSEUDOREF;
2847
+ return REF_TYPE_NORMAL;
2848
+}
2849
+
2850
int delete_ref(const char *refname, const unsigned char *sha1, unsigned int flags)
2851
{
2852
struct ref_transaction *transaction;
refs.h
+8
@@ -380,6 +380,14 @@ int update_ref(const char *msg, const char *refname,
380
extern int parse_hide_refs_config(const char *var, const char *value, const char *);
381
extern int ref_is_hidden(const char *);
382
383
+enum ref_type {
384
+ REF_TYPE_PER_WORKTREE,
385
+ REF_TYPE_PSEUDOREF,
386
+ REF_TYPE_NORMAL,
387
+};
388
+
389
+enum ref_type ref_type(const char *refname);
390
+
391
enum expire_reflog_flags {
392
EXPIRE_REFLOGS_DRY_RUN = 1 << 0,
393
EXPIRE_REFLOGS_UPDATE_REF = 1 << 1,