arc diff does not deal well with submodule diffs in the working copy.
For example, if your working copy has submodule changes, and you run arc diff, it will present the option to ignore the diffs.
If you accept the offer, arc diff will try to git stash pop an unrelated stash into your working copy, and fail hard when it (probably) doesn't merge correctly, or if you have no commits in your git stash. For example:
You have uncommitted changes in this working copy. Working copy: /u/j/editor/ Unstaged changes in working copy: Frameworks # this is a submodule! Do you want to create a new commit with these changes? [y/N] N Stashing uncommitted changes. (You can restore them with `git stash pop`). You have not specified any reviewers. Continue anyway? [y/N] y Linting... No lint engine configured for this project. Running unit tests... No unit test engine is configured for this project. Exception Command failed with error #1! COMMAND git stash pop [...lots of output from failed merges...] STDERR (empty) (Run with `--trace` for a full exception trace.)
I am currently running with a patch which relaxes the handling of submodule diffs by passing --ignore-submodules to git diff and git diff-files in two cases. A config option is provided for anyone who really likes the current behavior. However, the current behavior is not considered useful by anyone in my organization, so I'd be happy to make --ignore-submodules the default.
On the flip side, this change is very useful to us, as we often are running with submodule modifications, and undoing all of them in order to create each arc diff is burdensome and a big time sink. Pretty much everyone in my organization has some form of this patch in their arcanist clone.