remote.c: report specific errors from branch_get_upstream
[gitweb.git] / remote.h
index 8b62efd2adcb74c7e46d3f918a25658d6f6ce16f..03ca0058fe67c29f2d948aaa39d9a19bc6d59465 100644 (file)
--- a/remote.h
+++ b/remote.h
@@ -115,7 +115,8 @@ struct ref {
                REF_STATUS_REJECT_SHALLOW,
                REF_STATUS_UPTODATE,
                REF_STATUS_REMOTE_REJECT,
-               REF_STATUS_EXPECTING_REPORT
+               REF_STATUS_EXPECTING_REPORT,
+               REF_STATUS_ATOMIC_PUSH_FAILED
        } status;
        char *remote_status;
        struct ref *peer_ref; /* when renaming */
@@ -202,7 +203,7 @@ struct branch {
        const char *refname;
 
        const char *remote_name;
-       struct remote *remote;
+       const char *pushremote_name;
 
        const char **merge_name;
        struct refspec **merge;
@@ -211,10 +212,23 @@ struct branch {
 };
 
 struct branch *branch_get(const char *name);
+const char *remote_for_branch(struct branch *branch, int *explicit);
+const char *pushremote_for_branch(struct branch *branch, int *explicit);
 
 int branch_has_merge_config(struct branch *branch);
 int branch_merge_matches(struct branch *, int n, const char *);
 
+/**
+ * Return the fully-qualified refname of the tracking branch for `branch`.
+ * I.e., what "branch@{upstream}" would give you. Returns NULL if no
+ * upstream is defined.
+ *
+ * If `err` is not NULL and no upstream is defined, a more specific error
+ * message is recorded there (if the function does not return NULL, then
+ * `err` is not touched).
+ */
+const char *branch_get_upstream(struct branch *branch, struct strbuf *err);
+
 /* Flags to match_refs. */
 enum match_refs_flags {
        MATCH_REFS_NONE         = 0,
@@ -260,7 +274,6 @@ struct push_cas_option {
 
 extern int parseopt_push_cas_option(const struct option *, const char *arg, int unset);
 extern int parse_push_cas_option(struct push_cas_option *, const char *arg, int unset);
-extern void clear_cas_option(struct push_cas_option *);
 
 extern int is_empty_cas(const struct push_cas_option *);
 void apply_push_cas(struct push_cas_option *, struct remote *, struct ref *);