Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
push: cleanup push rules comment
author
Chris Rorvick
<chris@rorvick.com>
Fri, 30 Nov 2012 01:41:40 +0000
(19:41 -0600)
committer
Junio C Hamano
<gitster@pobox.com>
Mon, 3 Dec 2012 16:02:33 +0000
(08:02 -0800)
Rewrite to remove inter-dependencies amongst the rules.
Signed-off-by: Chris Rorvick <chris@rorvick.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
remote.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
80054cf
)
diff --git
a/remote.c
b/remote.c
index ee0c1e54bcf20ba972c1f8813d0f7a81af675afd..aa6b7199b7c0a5abec5dfb697fef6f03f2b419b2 100644
(file)
--- a/
remote.c
+++ b/
remote.c
@@
-1319,27
+1319,29
@@
void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,
continue;
}
continue;
}
- /* This part determines what can overwrite what.
- * The rules are:
+ /*
+ * The below logic determines whether an individual
+ * refspec A:B can be pushed. The push will succeed
+ * if any of the following are true:
*
*
- * (0) you can always use --force or +A:B notation to
- * selectively force individual ref pairs.
+ * (1) the remote reference B does not exist
*
*
- * (1) if the old thing does not exist, it is OK.
+ * (2) the remote reference B is being removed (i.e.,
+ * pushing :B where no source is specified)
*
*
- * (2) if the destination is under refs/tags/ you are
- * not allowed to overwrite it; tags are expected
- * to be static once created
+ * (3) the update meets all fast-forwarding criteria:
*
*
- *
(3) if you do not have the old thing, you are not allowed
- *
to overwrite it; you would not know what you are losing
- *
otherwise.
+ *
(a) the destination is not under refs/tags/
+ *
(b) the old is a commit
+ *
(c) the new is a descendant of the old
*
*
- * (4) if old is a commit and new is a descendant of old
- * (implying new is commit-ish), it is OK.
+ * NOTE: We must actually have the old object in
+ * order to overwrite it in the remote reference,
+ * and the new object must be commit-ish. These are
+ * implied by (b) and (c) respectively.
*
*
- * (
5) regardless of all of the above, removing :B is
- *
always allowed.
+ * (
4) it is forced using the +A:B notation, or by
+ *
passing the --force argument
*/
ref->not_forwardable = !is_forwardable(ref);
*/
ref->not_forwardable = !is_forwardable(ref);