Merge branch 'bw/push-submodule-only'
"git submodule push" learned "--recurse-submodules=only option to push submodules out without pushing the top-level superproject. * bw/push-submodule-only: push: add option to push only submodules submodules: add RECURSE_SUBMODULES_ONLY value transport: reformat flag #defines to be more readable
This commit is contained in:
commit
792e22e3fd
@ -568,6 +568,8 @@ int cmd_push(int argc, const char **argv, const char *prefix)
|
|||||||
flags |= TRANSPORT_RECURSE_SUBMODULES_CHECK;
|
flags |= TRANSPORT_RECURSE_SUBMODULES_CHECK;
|
||||||
else if (recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND)
|
else if (recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND)
|
||||||
flags |= TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND;
|
flags |= TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND;
|
||||||
|
else if (recurse_submodules == RECURSE_SUBMODULES_ONLY)
|
||||||
|
flags |= TRANSPORT_RECURSE_SUBMODULES_ONLY;
|
||||||
|
|
||||||
if (tags)
|
if (tags)
|
||||||
add_refspec("refs/tags/*");
|
add_refspec("refs/tags/*");
|
||||||
|
@ -251,6 +251,8 @@ static int parse_push_recurse(const char *opt, const char *arg,
|
|||||||
return RECURSE_SUBMODULES_ON_DEMAND;
|
return RECURSE_SUBMODULES_ON_DEMAND;
|
||||||
else if (!strcmp(arg, "check"))
|
else if (!strcmp(arg, "check"))
|
||||||
return RECURSE_SUBMODULES_CHECK;
|
return RECURSE_SUBMODULES_CHECK;
|
||||||
|
else if (!strcmp(arg, "only"))
|
||||||
|
return RECURSE_SUBMODULES_ONLY;
|
||||||
else if (die_on_error)
|
else if (die_on_error)
|
||||||
die("bad %s argument: %s", opt, arg);
|
die("bad %s argument: %s", opt, arg);
|
||||||
else
|
else
|
||||||
|
@ -6,6 +6,7 @@ struct argv_array;
|
|||||||
struct sha1_array;
|
struct sha1_array;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
RECURSE_SUBMODULES_ONLY = -5,
|
||||||
RECURSE_SUBMODULES_CHECK = -4,
|
RECURSE_SUBMODULES_CHECK = -4,
|
||||||
RECURSE_SUBMODULES_ERROR = -3,
|
RECURSE_SUBMODULES_ERROR = -3,
|
||||||
RECURSE_SUBMODULES_NONE = -2,
|
RECURSE_SUBMODULES_NONE = -2,
|
||||||
|
@ -454,4 +454,25 @@ test_expect_success 'push --dry-run does not recursively update submodules' '
|
|||||||
test_cmp expected_submodule actual_submodule
|
test_cmp expected_submodule actual_submodule
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'push --dry-run does not recursively update submodules' '
|
||||||
|
git -C work push --dry-run --recurse-submodules=only ../pub.git master &&
|
||||||
|
|
||||||
|
git -C submodule.git rev-parse master >actual_submodule &&
|
||||||
|
git -C pub.git rev-parse master >actual_pub &&
|
||||||
|
test_cmp expected_pub actual_pub &&
|
||||||
|
test_cmp expected_submodule actual_submodule
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'push only unpushed submodules recursively' '
|
||||||
|
git -C work/gar/bage rev-parse master >expected_submodule &&
|
||||||
|
git -C pub.git rev-parse master >expected_pub &&
|
||||||
|
|
||||||
|
git -C work push --recurse-submodules=only ../pub.git master &&
|
||||||
|
|
||||||
|
git -C submodule.git rev-parse master >actual_submodule &&
|
||||||
|
git -C pub.git rev-parse master >actual_pub &&
|
||||||
|
test_cmp expected_submodule actual_submodule &&
|
||||||
|
test_cmp expected_pub actual_pub
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
15
transport.c
15
transport.c
@ -1015,7 +1015,9 @@ int transport_push(struct transport *transport,
|
|||||||
if (run_pre_push_hook(transport, remote_refs))
|
if (run_pre_push_hook(transport, remote_refs))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if ((flags & TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND) && !is_bare_repository()) {
|
if ((flags & (TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND |
|
||||||
|
TRANSPORT_RECURSE_SUBMODULES_ONLY)) &&
|
||||||
|
!is_bare_repository()) {
|
||||||
struct ref *ref = remote_refs;
|
struct ref *ref = remote_refs;
|
||||||
struct sha1_array commits = SHA1_ARRAY_INIT;
|
struct sha1_array commits = SHA1_ARRAY_INIT;
|
||||||
|
|
||||||
@ -1033,7 +1035,8 @@ int transport_push(struct transport *transport,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (((flags & TRANSPORT_RECURSE_SUBMODULES_CHECK) ||
|
if (((flags & TRANSPORT_RECURSE_SUBMODULES_CHECK) ||
|
||||||
((flags & TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND) &&
|
((flags & (TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND |
|
||||||
|
TRANSPORT_RECURSE_SUBMODULES_ONLY)) &&
|
||||||
!pretend)) && !is_bare_repository()) {
|
!pretend)) && !is_bare_repository()) {
|
||||||
struct ref *ref = remote_refs;
|
struct ref *ref = remote_refs;
|
||||||
struct string_list needs_pushing = STRING_LIST_INIT_DUP;
|
struct string_list needs_pushing = STRING_LIST_INIT_DUP;
|
||||||
@ -1052,7 +1055,10 @@ int transport_push(struct transport *transport,
|
|||||||
sha1_array_clear(&commits);
|
sha1_array_clear(&commits);
|
||||||
}
|
}
|
||||||
|
|
||||||
push_ret = transport->push_refs(transport, remote_refs, flags);
|
if (!(flags & TRANSPORT_RECURSE_SUBMODULES_ONLY))
|
||||||
|
push_ret = transport->push_refs(transport, remote_refs, flags);
|
||||||
|
else
|
||||||
|
push_ret = 0;
|
||||||
err = push_had_errors(remote_refs);
|
err = push_had_errors(remote_refs);
|
||||||
ret = push_ret | err;
|
ret = push_ret | err;
|
||||||
|
|
||||||
@ -1064,7 +1070,8 @@ int transport_push(struct transport *transport,
|
|||||||
if (flags & TRANSPORT_PUSH_SET_UPSTREAM)
|
if (flags & TRANSPORT_PUSH_SET_UPSTREAM)
|
||||||
set_upstreams(transport, remote_refs, pretend);
|
set_upstreams(transport, remote_refs, pretend);
|
||||||
|
|
||||||
if (!(flags & TRANSPORT_PUSH_DRY_RUN)) {
|
if (!(flags & (TRANSPORT_PUSH_DRY_RUN |
|
||||||
|
TRANSPORT_RECURSE_SUBMODULES_ONLY))) {
|
||||||
struct ref *ref;
|
struct ref *ref;
|
||||||
for (ref = remote_refs; ref; ref = ref->next)
|
for (ref = remote_refs; ref; ref = ref->next)
|
||||||
transport_update_tracking_ref(transport->remote, ref, verbose);
|
transport_update_tracking_ref(transport->remote, ref, verbose);
|
||||||
|
31
transport.h
31
transport.h
@ -131,21 +131,22 @@ struct transport {
|
|||||||
enum transport_family family;
|
enum transport_family family;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TRANSPORT_PUSH_ALL 1
|
#define TRANSPORT_PUSH_ALL (1<<0)
|
||||||
#define TRANSPORT_PUSH_FORCE 2
|
#define TRANSPORT_PUSH_FORCE (1<<1)
|
||||||
#define TRANSPORT_PUSH_DRY_RUN 4
|
#define TRANSPORT_PUSH_DRY_RUN (1<<2)
|
||||||
#define TRANSPORT_PUSH_MIRROR 8
|
#define TRANSPORT_PUSH_MIRROR (1<<3)
|
||||||
#define TRANSPORT_PUSH_PORCELAIN 16
|
#define TRANSPORT_PUSH_PORCELAIN (1<<4)
|
||||||
#define TRANSPORT_PUSH_SET_UPSTREAM 32
|
#define TRANSPORT_PUSH_SET_UPSTREAM (1<<5)
|
||||||
#define TRANSPORT_RECURSE_SUBMODULES_CHECK 64
|
#define TRANSPORT_RECURSE_SUBMODULES_CHECK (1<<6)
|
||||||
#define TRANSPORT_PUSH_PRUNE 128
|
#define TRANSPORT_PUSH_PRUNE (1<<7)
|
||||||
#define TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND 256
|
#define TRANSPORT_RECURSE_SUBMODULES_ON_DEMAND (1<<8)
|
||||||
#define TRANSPORT_PUSH_NO_HOOK 512
|
#define TRANSPORT_PUSH_NO_HOOK (1<<9)
|
||||||
#define TRANSPORT_PUSH_FOLLOW_TAGS 1024
|
#define TRANSPORT_PUSH_FOLLOW_TAGS (1<<10)
|
||||||
#define TRANSPORT_PUSH_CERT_ALWAYS 2048
|
#define TRANSPORT_PUSH_CERT_ALWAYS (1<<11)
|
||||||
#define TRANSPORT_PUSH_CERT_IF_ASKED 4096
|
#define TRANSPORT_PUSH_CERT_IF_ASKED (1<<12)
|
||||||
#define TRANSPORT_PUSH_ATOMIC 8192
|
#define TRANSPORT_PUSH_ATOMIC (1<<13)
|
||||||
#define TRANSPORT_PUSH_OPTIONS 16384
|
#define TRANSPORT_PUSH_OPTIONS (1<<14)
|
||||||
|
#define TRANSPORT_RECURSE_SUBMODULES_ONLY (1<<15)
|
||||||
|
|
||||||
extern int transport_summary_width(const struct ref *refs);
|
extern int transport_summary_width(const struct ref *refs);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user