Arc diff hangs on git commit
arcanist, git, phabricator
Solution
I had the same problem. I made debugging and discovered that the reason was a warning message "LF will be replaced by CRLF.." during "git diff" execution. I made "git config core.safecrlf false" and this solved the problem.
Problem
I'm trying to get a good workflow working for Phabricator and recently made a few changes to our test project to work out some things. I made several changes but forgot to put them in their own feature branches. All of the changes were uncommitted to git. I went ahead a created feature branches as applicable for the changes I made and committed them. I thought I'd be able to switch to each branch and do an `arc diff` to create the code reviews for them (and I still think I can do this). However, when I execute `arc diff` on the currently-checked-out branch, the command never completes. To see what was going on, I ran `arc diff --trace`. The output is below. As you can surmise, it gets through the commit message specification (in my case via Notepad++) and then just completely dies on the `[26] git diff` line (and by "dies" I mean it hangs and never completes). ``` libphutil loaded from 'S:\web\_arcanist\libphutil\src'. arcanist loaded from 'S:\web\_arcanist\arcanist\src'. Working Copy: Reading .arcconfig from "S:\web\_apollo\andreas\bonfire3/.arcconfi g". Working Copy: Path "S:\web\_apollo\andreas\bonfire3" is part of `git` working co py "S:\web\_apollo\andreas\bonfire3". Working Copy: Project root is at "S:\web\_apollo\andreas\bonfire3". >>> [0] <conduit> conduit.connect() <bytes = 445> >>> [1] <http> http://phabricator.mydomain.com/api/conduit.connect <<< [1] <http> 1,086,426 us <<< [0] <conduit> 1,089,191 us >>> [2] <exec> $ git diff --no-ext-diff --no-textconv --raw "HEAD" -- >>> [3] <exec> $ git ls-files --others --exclude-standard >>> [4] <exec> $ git diff-files --name-only <<< [3] <exec> 56,380 us <<< [2] <exec> 84,804 us <<< [4] <exec> 60,751 us >>> [5] <event> diff.didCollectChanges <listeners = 0> <<< [5] <event> 744 us >>> [6] <exec> $ git rev-parse --verify HEAD^ <<< [6] <exec> 44,265 us >>> [7] <exec> $ git rev-parse --abbrev-ref --symbolic-full-name '@{upstream}' <<< [7] <exec> 75,134 us >>> [8] <exec> $ git rev-parse --git-dir <<< [8] <exec> 63,179 us >>> [9] <exec> $ git cat-file -t "origin/master" <<< [9] <exec> 35,771 us >>> [10] <exec> $ git merge-base "origin/master" HEAD <<< [10] <exec> 70,249 us >>> [11] <exec> $ git log --first-parent --format=medium "91098728f2d669d8c1ce96 c2ba84059b57241fb6"..HEAD <<< [11] <exec> 59,466 us >>> [12] <exec> $ git log "HEAD" --not "91098728f2d669d8c1ce96c2ba84059b57241fb6 " --format=%H%x01%T%x01%P%x01%at%x01%an%x01%aE%x01%s%x01%s%n%n%b%x02 -- <<< [12] <exec> 57,813 us >>> [13] <conduit> differential.query() <bytes = 415> >>> [14] <http> http://phabricator.mydomain.com/api/differential.query <<< [14] <http> 136,410 us <<< [13] <conduit> 139,261 us You have a saved revision message in '.git\arc\create-message'. Message begins: Installed DBV You can use this message, or discard it. Do you want to use this message? [Y/n] y >>> [15] <exec> $ git log "HEAD" --not "91098728f2d669d8c1ce96c2ba84059b57241fb6 " --format=%H%x01%T%x01%P%x01%at%x01%an%x01%aE%x01%s%x01%s%n%n%b%x02 -- <<< [15] <exec> 40,860 us >>> [16] <conduit> differential.parsecommitmessage() <bytes = 356> >>> [17] <http> http://phabricator.mydomain.com/api/differential.parsecommitmessa ge <<< [17] <http> 154,222 us <<< [16] <conduit> 155,662 us >>> [18] <event> diff.willBuildMessage <listeners = 0> <<< [18] <event> 556 us >>> [19] <exec> $ git branch --no-color <<< [19] <exec> 60,581 us >>> [20] <exec> $ "C:\Program Files (x86)\Notepad++\notepad++.exe" -multiInst -n osession "C:\Users\andreas\AppData\Local\Temp\2\edit.6y1tzwocr1ookc0c\new-commi t" <<< [20] <exec> 2,583,272 us >>> [21] <conduit> differential.parsecommitmessage() <bytes = 434> >>> [22] <http> http://phabricator.mydomain.com/api/differential.parsecommitmessa ge <<< [22] <http> 156,039 us <<< [21] <conduit> 158,955 us >>> [23] <conduit> user.query() <bytes = 254> >>> [24] <http> http://phabricator.mydomain.com/api/user.query <<< [24] <http> 101,262 us <<< [23] <conduit> 103,793 us >>> [25] <event> diff.didBuildMessage <listeners = 0> <<< [25] <event> 1,169 us Linting... No lint engine configured for this project. Running unit tests... No unit test engine is configured for this project. >>> [26] <exec> $ git diff --no-ext-diff --no-textconv --no-color --src-prefix=a / --dst-prefix=b/ -U32767 -M -C "91098728f2d669d8c1ce96c2ba84059b57241fb6" -- ``` I've tried copying the `git diff` command into a separate terminal and it works fine. I assumed maybe something was wrong with PHP's `exec` command locally, so I created a quick 2 line PHP file to run the `git diff` command through that...worked fine. I've left the `arc diff` command running at that line for several hours and it just doesn't complete. Any ideas as to how to troubleshoot this? UPDATE I forgot to mention that `arc diff` also hangs on a `git commit --amend`, too.