diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2015-06-13 18:31:27 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2015-06-13 18:36:08 -0700 |
commit | e6dce94088ded1174af6e4a1bb498e2944ee0aff (patch) | |
tree | 62c3650fb34f24009a5e8453bdd458f9fadbaa8e /git-access.c | |
parent | ef85875cd006db61679b95e62fd70101c9014799 (diff) | |
download | subsurface-e6dce94088ded1174af6e4a1bb498e2944ee0aff.tar.gz |
Cloud storage: if there is no remote tracking branch, create it
When we first store things to the remote there won't be a matching branch
for it. And even if for some silly reason the remote branch got lost -
what's the point of telling the user that there is no remote branch? What
are they supposed to do about it. Let's just fix the problem and move on.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'git-access.c')
-rw-r--r-- | git-access.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/git-access.c b/git-access.c index 85c6f8d3c..cb8a683be 100644 --- a/git-access.c +++ b/git-access.c @@ -205,13 +205,25 @@ static int check_remote_status(git_repository *repo, git_remote *origin, const c return report_error("Git cache branch %s no longer exists", branch); if (git_branch_upstream(&remote_ref, local_ref)) { - git_reference_free(local_ref); - return report_error("Git cache branch %s no longer has an upstream branch", branch); + /* so there is no upstream branch for our branch; that's a problem. + /* let's push our branch */ + git_strarray refspec; + git_reference_list(&refspec, repo); +#if USE_LIBGIT23_API + git_push_options opts = GIT_PUSH_OPTIONS_INIT; + if (rt == RT_SSH) + opts.callbacks.credentials = credential_ssh_cb; + else if (rt == RT_HTTPS) + opts.callbacks.credentials = credential_https_cb; + git_remote_push(origin, &refspec, &opts); +#else + git_remote_push(origin, &refspec, NULL); +#endif + } else { + try_to_update(repo, origin, local_ref, remote_ref, rt); + git_reference_free(remote_ref); } - - try_to_update(repo, origin, local_ref, remote_ref, rt); git_reference_free(local_ref); - git_reference_free(remote_ref); } int sync_with_remote(git_repository *repo, const char *remote, const char *branch, enum remote_transport rt) |