const struct ref *remote_refs;
- for (i = 0; i < rs->nr; i++) {
- const struct refspec_item *item = &rs->items[i];
- if (!item->exact_sha1) {
- const char *glob = strchr(item->src, '*');
- if (glob)
- argv_array_pushf(&ref_prefixes, "%.*s",
- (int)(glob - item->src),
- item->src);
- else
- expand_ref_prefix(&ref_prefixes, item->src);
- }
- }
+ refspec_ref_prefixes(rs, &ref_prefixes);
remote_refs = transport_get_remote_refs(transport, &ref_prefixes);
#include "cache.h"
+#include "argv-array.h"
#include "refs.h"
#include "refspec.h"
refspec_item_clear(&refspec);
return ret;
}
+
+void refspec_ref_prefixes(const struct refspec *rs,
+ struct argv_array *ref_prefixes)
+{
+ int i;
+ for (i = 0; i < rs->nr; i++) {
+ const struct refspec_item *item = &rs->items[i];
+ const char *prefix = NULL;
+
+ if (rs->fetch == REFSPEC_FETCH)
+ prefix = item->src;
+ else if (item->dst)
+ prefix = item->dst;
+ else if (item->src && !item->exact_sha1)
+ prefix = item->src;
+
+ if (prefix) {
+ if (item->pattern) {
+ const char *glob = strchr(prefix, '*');
+ argv_array_pushf(ref_prefixes, "%.*s",
+ (int)(glob - prefix),
+ prefix);
+ } else {
+ expand_ref_prefix(ref_prefixes, prefix);
+ }
+ }
+ }
+}
int valid_fetch_refspec(const char *refspec);
+struct argv_array;
+void refspec_ref_prefixes(const struct refspec *rs,
+ struct argv_array *ref_prefixes);
+
#endif /* REFSPEC_H */
int pretend = flags & TRANSPORT_PUSH_DRY_RUN;
int push_ret, ret, err;
struct argv_array ref_prefixes = ARGV_ARRAY_INIT;
- int i;
if (check_push_refs(local_refs, rs) < 0)
return -1;
- for (i = 0; i < rs->nr; i++) {
- const struct refspec_item *item = &rs->items[i];
- const char *prefix = NULL;
-
- if (item->dst)
- prefix = item->dst;
- else if (item->src && !item->exact_sha1)
- prefix = item->src;
-
- if (prefix) {
- const char *glob = strchr(prefix, '*');
- if (glob)
- argv_array_pushf(&ref_prefixes, "%.*s",
- (int)(glob - prefix),
- prefix);
- else
- expand_ref_prefix(&ref_prefixes, prefix);
- }
- }
+ refspec_ref_prefixes(rs, &ref_prefixes);
remote_refs = transport->vtable->get_refs_list(transport, 1,
&ref_prefixes);