Browse Source

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
maint
Junio C Hamano 5 years ago
parent
commit
67d99b82de
  1. 8
      http-push.c
  2. 2
      object.h
  3. 16
      t/t5540-http-push-webdav.sh

8
http-push.c

@ -70,10 +70,10 @@ enum XML_Status { @@ -70,10 +70,10 @@ enum XML_Status {
#define LOCK_REFRESH 30

/* Remember to update object flag allocation in object.h */
#define LOCAL (1u<<16)
#define REMOTE (1u<<17)
#define FETCHING (1u<<18)
#define PUSHING (1u<<19)
#define LOCAL (1u<<11)
#define REMOTE (1u<<12)
#define FETCHING (1u<<13)
#define PUSHING (1u<<14)

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

2
object.h

@ -66,7 +66,7 @@ struct object_array { @@ -66,7 +66,7 @@ struct object_array {
* builtin/blame.c: 12-13
* bisect.c: 16
* bundle.c: 16
* http-push.c: 16-----19
* http-push.c: 11-----14
* commit-graph.c: 15
* commit-reach.c: 16-----19
* sha1-name.c: 20

16
t/t5540-http-push-webdav.sh

@ -126,6 +126,22 @@ test_expect_success 'create and delete remote branch' ' @@ -126,6 +126,22 @@ test_expect_success 'create and delete remote branch' '
test_must_fail git show-ref --verify refs/remotes/origin/dev
'

test_expect_success 'non-force push fails if not up to date' '
git init --bare "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo_conflict.git &&
git -C "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo_conflict.git update-server-info &&
git clone $HTTPD_URL/dumb/test_repo_conflict.git "$ROOT_PATH"/c1 &&
git clone $HTTPD_URL/dumb/test_repo_conflict.git "$ROOT_PATH"/c2 &&
test_commit -C "$ROOT_PATH/c1" path1 &&
git -C "$ROOT_PATH/c1" push origin HEAD &&
git -C "$ROOT_PATH/c2" pull &&
test_commit -C "$ROOT_PATH/c1" path2 &&
git -C "$ROOT_PATH/c1" push origin HEAD &&
test_commit -C "$ROOT_PATH/c2" path3 &&
git -C "$ROOT_PATH/c1" log --graph --all &&
git -C "$ROOT_PATH/c2" log --graph --all &&
test_must_fail git -C "$ROOT_PATH/c2" push origin HEAD
'

test_expect_success 'MKCOL sends directory names with trailing slashes' '

! grep "\"MKCOL.*[^/] HTTP/[^ ]*\"" < "$HTTPD_ROOT_PATH"/access.log

Loading…
Cancel
Save