4caaf1f8e3b79a9b68beca5f841dbfc487d154a2
   1#ifndef REFSPEC_H
   2#define REFSPEC_H
   3
   4#define TAG_REFSPEC "refs/tags/*:refs/tags/*"
   5extern const struct refspec_item *tag_refspec;
   6
   7struct refspec_item {
   8        unsigned force : 1;
   9        unsigned pattern : 1;
  10        unsigned matching : 1;
  11        unsigned exact_sha1 : 1;
  12
  13        char *src;
  14        char *dst;
  15};
  16
  17#define REFSPEC_FETCH 1
  18#define REFSPEC_PUSH 0
  19
  20#define REFSPEC_INIT_FETCH { .fetch = REFSPEC_FETCH }
  21#define REFSPEC_INIT_PUSH { .fetch = REFSPEC_PUSH }
  22
  23struct refspec {
  24        struct refspec_item *items;
  25        int alloc;
  26        int nr;
  27
  28        const char **raw;
  29        int raw_alloc;
  30        int raw_nr;
  31
  32        int fetch;
  33};
  34
  35void refspec_item_init_or_die(struct refspec_item *item, const char *refspec,
  36                              int fetch);
  37void refspec_item_clear(struct refspec_item *item);
  38void refspec_init(struct refspec *rs, int fetch);
  39void refspec_append(struct refspec *rs, const char *refspec);
  40void refspec_appendn(struct refspec *rs, const char **refspecs, int nr);
  41void refspec_clear(struct refspec *rs);
  42
  43int valid_fetch_refspec(const char *refspec);
  44
  45struct argv_array;
  46/*
  47 * Determine what <prefix> values to pass to the peer in ref-prefix lines
  48 * (see Documentation/technical/protocol-v2.txt).
  49 */
  50void refspec_ref_prefixes(const struct refspec *rs,
  51                          struct argv_array *ref_prefixes);
  52
  53#endif /* REFSPEC_H */