arc patch with the new git workflow

Hi all,

The Phabricator docs seem to say that downloading a patch goes with arc patch. However, I tried it on several revisions and they all fail with:

Checking patch some/path/to/a/file/that/exists …
error: some/path/to/a/file/that/exists: does not exist in index

With the svn repo I found that command to be really useful. But now it seems like I have to download the patch manually, create a new branch, apply it and create a commit for it. Having arc patch would be a really great improvement to that - since it also does arc specific stuff I believe that I can’t do manually (like arc diff telling me which patch to commit).

Is there a way I can make it work?

Thanks
P.S: I’m not on llvm-dev list, so any replies would have to mention my email I guess :slight_smile:

  • Nicolas

Hi,

Are you trying to apply a revision that was uploaded to Phabricator from one of the individual repository (or from SVN)?
The issue if I remember correctly is that a patch uploaded from an SVN checkout would not start with llvm/ or clang/ and wouldn’t be able to be applied in the monorepo. Conversely, a revision created from the monorepo can’t be applied by arc patch in a single subproject checkout.
I don’t think there is a way around this, maybe --strip-prefix and --add-prefix options could be added to arc patch, but I’m not sure it would fit the expectation of arc upstream.

Hi,

Are you trying to apply a revision that was uploaded to Phabricator from one of the individual repository (or from SVN)?

Yes from clang if I understood your question correctly.

The issue if I remember correctly is that a patch uploaded from an SVN checkout would not start with llvm/ or clang/ and wouldn’t be able to be applied in the monorepo. Conversely, a revision created from the monorepo can’t be applied by arc patch in a single subproject checkout.
I don’t think there is a way around this, maybe --strip-prefix and --add-prefix options could be added to arc patch, but I’m not sure it would fit the expectation of arc upstream.

That’s what I thought too, but doing arc patch either in llvm-project/ or in llvm-project/clang/ doesn’t change anything.

Thanks again,

  • Nicolas

Unless of course arc patch doesn’t use the current directory as patch point! Thank you.

  • Nicolas

Personally I’d like a “git llvm fetch-diff D1234” subcommand, which outputs a patch in the format of “git format-patch”, which, you could then pipe to “git am”, say, providing whatever prefix options you like.

arc patch applies the patch as is. That means, if someone uploads the patch with arc for the monorepo, arc patch just works.

I’ve had the same issue with the svn monorepo and the git mirrors before.

Cheers,
Philip

Not sure if you resolved this, but you could always export the patch to stdout or a file, then just use patch to apply it.
This is how I get specific diffs – D always gives you the latest.

arc export --git --diff | patch -p -

Hi,
I encountered some similar problem today. Shall we document this problem and illustrate the right workflow in detail in our developer guides?

Best Regards,
Xing