Skip to content

Commit 67d99b8

Browse files
committed
Merge branch 'bc/http-push-flagsfix'
The code to push changes over "dumb" HTTP had a bad interaction with the commit reachability code due to incorrect allocation of object flag bits, which has been corrected. * bc/http-push-flagsfix: http-push: ensure unforced pushes fail when data would be lost
2 parents 8a78e4d + 64472d1 commit 67d99b8

File tree

3 files changed

+21
-5
lines changed

3 files changed

+21
-5
lines changed

http-push.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,10 @@ enum XML_Status {
7070
#define LOCK_REFRESH 30
7171

7272
/* Remember to update object flag allocation in object.h */
73-
#define LOCAL (1u<<16)
74-
#define REMOTE (1u<<17)
75-
#define FETCHING (1u<<18)
76-
#define PUSHING (1u<<19)
73+
#define LOCAL (1u<<11)
74+
#define REMOTE (1u<<12)
75+
#define FETCHING (1u<<13)
76+
#define PUSHING (1u<<14)
7777

7878
/* We allow "recursive" symbolic refs. Only within reason, though */
7979
#define MAXDEPTH 5

object.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ struct object_array {
6666
* builtin/blame.c: 12-13
6767
* bisect.c: 16
6868
* bundle.c: 16
69-
* http-push.c: 16-----19
69+
* http-push.c: 11-----14
7070
* commit-graph.c: 15
7171
* commit-reach.c: 16-----19
7272
* sha1-name.c: 20

t/t5540-http-push-webdav.sh

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,22 @@ test_expect_success 'create and delete remote branch' '
126126
test_must_fail git show-ref --verify refs/remotes/origin/dev
127127
'
128128

129+
test_expect_success 'non-force push fails if not up to date' '
130+
git init --bare "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo_conflict.git &&
131+
git -C "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo_conflict.git update-server-info &&
132+
git clone $HTTPD_URL/dumb/test_repo_conflict.git "$ROOT_PATH"/c1 &&
133+
git clone $HTTPD_URL/dumb/test_repo_conflict.git "$ROOT_PATH"/c2 &&
134+
test_commit -C "$ROOT_PATH/c1" path1 &&
135+
git -C "$ROOT_PATH/c1" push origin HEAD &&
136+
git -C "$ROOT_PATH/c2" pull &&
137+
test_commit -C "$ROOT_PATH/c1" path2 &&
138+
git -C "$ROOT_PATH/c1" push origin HEAD &&
139+
test_commit -C "$ROOT_PATH/c2" path3 &&
140+
git -C "$ROOT_PATH/c1" log --graph --all &&
141+
git -C "$ROOT_PATH/c2" log --graph --all &&
142+
test_must_fail git -C "$ROOT_PATH/c2" push origin HEAD
143+
'
144+
129145
test_expect_success 'MKCOL sends directory names with trailing slashes' '
130146
131147
! grep "\"MKCOL.*[^/] HTTP/[^ ]*\"" < "$HTTPD_ROOT_PATH"/access.log

0 commit comments

Comments
 (0)