Page MenuHomePhabricator

Unable to push commits to hosted repositories
Closed, InvalidPublic

Description

I'm unable to push any commit to any repo. I use this docker for my company Phabricator instance. Unfortunately the recent update has broken the pre-receive hook.

I started up a fresh local instance of the docker and created an empty repo. See below (domain info replaced with xxxx):

$ git clone ssh://git@phabricator.xxxx.com/diffusion/1/test.git
Cloning into 'test'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

$ cd test

$ touch file.txt

$ git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	file.txt

nothing added to commit but untracked files present (use "git add" to track)

$ git add -A

$ git commit -m "Added empty file"
[master (root-commit) 61a46cf] Added empty file
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 file.txt

$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 226 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: [2016-12-04 18:32:56] EXCEPTION: (CommandException) Command failed with error #128!
remote: COMMAND
remote: git log --format='%H' '61a46cf3d362b903a85cde2d0ea132703462c57a' --not --all
remote: 
remote: STDOUT
remote: (empty)
remote: 
remote: STDERR
remote: fatal: bad object 61a46cf3d362b903a85cde2d0ea132703462c57a
remote:  at [<phutil>/src/future/exec/ExecFuture.php:369]
remote: arcanist(head=stable, ref.master=fad85844314b, ref.stable=e17fe43ca3fe), phabricator(head=stable, ref.master=f0bf0419f12a, ref.stable=ad65d933fa75), phutil(head=stable, ref.master=6296b5d0f1e9, ref.stable=3230179f3ce5)
remote:   #0 ExecFuture::resolvex() called at [<phabricator>/src/applications/diffusion/engine/DiffusionCommitHookEngine.php:565]
remote:   #1 DiffusionCommitHookEngine::findGitContentUpdates(array) called at [<phabricator>/src/applications/diffusion/engine/DiffusionCommitHookEngine.php:250]
remote:   #2 DiffusionCommitHookEngine::findContentUpdates(array) called at [<phabricator>/src/applications/diffusion/engine/DiffusionCommitHookEngine.php:133]
remote:   #3 DiffusionCommitHookEngine::execute() called at [<phabricator>/scripts/repository/commit_hook.php:186]
To ssh://git@phabricator.xxxx.com/diffusion/1/test.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'ssh://git@phabricator.xxxx.com/diffusion/1/test.git'

Existing repos with existing commit history will get the 'dragon' (see below), even after a fresh clone. Then, if I allow dangerous actions, I get the error output above, same as a new repo.

$ git push origin dev 
Counting objects: 2, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 283 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: +---------------------------------------------------------------+
remote: |      * * * PUSH REJECTED BY EVIL DRAGON BUREAUCRATS * * *     |
remote: +---------------------------------------------------------------+
remote:             \
remote:              \                    ^    /^
remote:               \                  / \  // \
remote:                \   |\___/|      /   \//  .\
remote:                 \  /V  V  \__  /    //  | \ \           *----*
remote:                   /     /  \/_/    //   |  \  \          \   |
remote:                   @___@`    \/_   //    |   \   \         \/\ \
remote:                  0/0/|       \/_ //     |    \    \         \  \
remote:              0/0/0/0/|        \///      |     \     \       |  |
remote:           0/0/0/0/0/_|_ /   (  //       |      \     _\     |  /
remote:        0/0/0/0/0/0/`/,_ _ _/  ) ; -.    |    _ _\.-~       /   /
remote:                    ,-}        _      *-.|.-~-.           .~    ~
remote:   \     \__/        `/\      /                 ~-. _ .-~      /
remote:    \____(Oo)           *.   }            {                   /
remote:    (    (--)          .----~-.\        \-`                 .~
remote:    //__\\  \ DENIED!  ///.----..<        \             _ -~
remote:   //    \\               ///-._ _ _ _ _ _ _{^ - - - - ~
remote: 
remote: 
remote: DANGEROUS CHANGE: The change you're attempting to push updates the branch 'dev' from '9c8002769cbb' to '37772df5de48', but this is not a fast-forward. Pushes which rewrite published branch history are dangerous.
remote: Dangerous change protection is enabled for this repository.
remote: Edit the repository configuration before making dangerous changes.
remote: 
To ssh://git@phabricator.xxxx.com/diffusion/72/xxxx.git
 ! [remote rejected] dev -> dev (pre-receive hook declined)
error: failed to push some refs to 'ssh://git@phabricator.xxxx.com/diffusion/72/xxxx.git'

Initially I though it was a specific repo that got corrupted, but soon realised that all repos are doing exactly the same.

Version Info:
arcanist(head=stable, ref.master=fad85844314b, ref.stable=e17fe43ca3fe), phabricator(head=stable, ref.master=f0bf0419f12a, ref.stable=ad65d933fa75)

Replicate:

  • Start fresh instance of the docker with stable branches passed as the env vars or setup manually (untested).
  • Run through initial admin account creation.
  • Add your public key via settings.
  • Create and empty self hosted repository using Diffusion.
  • Clone the repo.
  • Create a file and commit it.
  • Attempt to push it to origin

Event Timeline

You're welcome to spin up a test instance on Phacility or do a installation from our guide, but we don't accept bug reports that include "use third party installer" to reproduce.

Hi Chad, thanks for the quick response. That's unfortunate, I use to run setup using the "Installation Guide" a while back. That server died a few months ago and I decided to docker everything. My previous setup use to check for updates every 30 minutes and I never had any issues. Thus, I let this docker update every time it restarts, probably shouldn't have done that. :)

Anyhoe, sorry for the life story. I've requested help from the docker maintainer.

It would be great if you have an "official" docker, just makes like so much easier. Just an idea!

Thanks!

epriestley added a subscriber: epriestley.

As above, we don't support installs that don't follow our guide.

This is probably a duplicate of T11940.

Brilliant! As T11940 mentions, downgrading to git 2.10.2 fixes the problem. Thanks guys.

This issue is now fixed in the Docker image, which now uses an older version of Git and checks to ensure that it does not install 2.11 when the image is being prepared. If you're affected by this issue, run docker pull hachque/phabricator.