packaging: Add contrib installation
[platform/upstream/git.git] / refspec.c
index 8af357a..e3d852c 100644 (file)
--- a/refspec.c
+++ b/refspec.c
@@ -71,7 +71,10 @@ static int parse_refspec(struct refspec_item *item, const char *refspec, int fet
        }
 
        item->pattern = is_glob;
-       item->src = xstrndup(lhs, llen);
+       if (llen == 1 && *lhs == '@')
+               item->src = xstrdup("HEAD");
+       else
+               item->src = xstrndup(lhs, llen);
        flags = REFNAME_ALLOW_ONELEVEL | (is_glob ? REFNAME_REFSPEC_PATTERN : 0);
 
        if (item->negative) {
@@ -245,6 +248,16 @@ int valid_fetch_refspec(const char *fetch_refspec_str)
        return ret;
 }
 
+int valid_remote_name(const char *name)
+{
+       int result;
+       struct strbuf refspec = STRBUF_INIT;
+       strbuf_addf(&refspec, "refs/heads/test:refs/remotes/%s/test", name);
+       result = valid_fetch_refspec(refspec.buf);
+       strbuf_release(&refspec);
+       return result;
+}
+
 void refspec_ref_prefixes(const struct refspec *rs,
                          struct strvec *ref_prefixes)
 {
@@ -262,15 +275,16 @@ void refspec_ref_prefixes(const struct refspec *rs,
                else if (item->src && !item->exact_sha1)
                        prefix = item->src;
 
-               if (prefix) {
-                       if (item->pattern) {
-                               const char *glob = strchr(prefix, '*');
-                               strvec_pushf(ref_prefixes, "%.*s",
-                                            (int)(glob - prefix),
-                                            prefix);
-                       } else {
-                               expand_ref_prefix(ref_prefixes, prefix);
-                       }
+               if (!prefix)
+                       continue;
+
+               if (item->pattern) {
+                       const char *glob = strchr(prefix, '*');
+                       strvec_pushf(ref_prefixes, "%.*s",
+                                    (int)(glob - prefix),
+                                    prefix);
+               } else {
+                       expand_ref_prefix(ref_prefixes, prefix);
                }
        }
 }