diff options
author | Thomas Gummerer <t.gummerer@gmail.com> | 2017-11-26 19:43:51 +0000 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-11-27 09:48:06 +0900 |
commit | 7c85a87c5449f6495fe0327cfdcd1e0940d8545a (patch) | |
tree | a720e4dac184883c79a1b3f9a345472a256ef444 /builtin | |
parent | 14c63a9dc093d6738454f6369a4f5663ca732cf7 (diff) | |
download | git-7c85a87c5449f6495fe0327cfdcd1e0940d8545a.tar.gz git-7c85a87c5449f6495fe0327cfdcd1e0940d8545a.tar.xz |
checkout: factor out functions to new lib file
Factor the functions out, so they can be re-used from other places. In
particular these functions will be re-used in builtin/worktree.c to make
git worktree add dwim more.
While there add some docs to the function.
Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/checkout.c | 41 |
1 files changed, 1 insertions, 40 deletions
diff --git a/builtin/checkout.c b/builtin/checkout.c index 7d8bcc383..ad8f94044 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -1,5 +1,6 @@ #include "builtin.h" #include "config.h" +#include "checkout.h" #include "lockfile.h" #include "parse-options.h" #include "refs.h" @@ -872,46 +873,6 @@ static int git_checkout_config(const char *var, const char *value, void *cb) return git_xmerge_config(var, value, NULL); } -struct tracking_name_data { - /* const */ char *src_ref; - char *dst_ref; - struct object_id *dst_oid; - int unique; -}; - -static int check_tracking_name(struct remote *remote, void *cb_data) -{ - struct tracking_name_data *cb = cb_data; - struct refspec query; - memset(&query, 0, sizeof(struct refspec)); - query.src = cb->src_ref; - if (remote_find_tracking(remote, &query) || - get_oid(query.dst, cb->dst_oid)) { - free(query.dst); - return 0; - } - if (cb->dst_ref) { - free(query.dst); - cb->unique = 0; - return 0; - } - cb->dst_ref = query.dst; - return 0; -} - -static const char *unique_tracking_name(const char *name, struct object_id *oid) -{ - struct tracking_name_data cb_data = { NULL, NULL, NULL, 1 }; - cb_data.src_ref = xstrfmt("refs/heads/%s", name); - cb_data.dst_oid = oid; - for_each_remote(check_tracking_name, &cb_data); - free(cb_data.src_ref); - if (cb_data.unique) - return cb_data.dst_ref; - free(cb_data.dst_ref); - return NULL; -} - static int parse_branchname_arg(int argc, const char **argv, int dwim_new_local_branch_ok, struct branch_info *new, |