Search code examples
gitreview-boardformat-patch

Upload from git format-patch to ReviewBoard fails on "file not found in the repository"


Has anyone seen the complaint The file “<file>” (revision <revision>) was not found in the repository when using the ReviewBoard GUI?

E.g. I get The file "agent/src/com/cloud/agent/resource/HypervResource.java" (revision 8b8e89d) was not found in the repository when uploading a diff file created with git format-patch.

However, that file is part of my diff, and was never in the git repo referenced by my patch.

The background is that I created a patch for the master branch. E.g.

$ git format-patch origin/master --stdout > ../hyperV-plugin.patch

The patch itself describes the creation of the file, an applies index 8b8e89d, as show below.

1.7.9


From 13f9c118c724afb52b0694de539b4e1b3c38e7f7 Mon Sep 17 00:00:00 2001
From: "U-CC-SVR11\\Administrator" <Administrator@CC-SVR11.(none)>
Date: Thu, 15 Nov 2012 19:19:08 +0000
Subject: [PATCH 07/96] Starting point for ServerResource for Hyper-V is DummyResource.

---
.../com/cloud/agent/resource/HypervResource.java   |  227
++++++++++++++++++++
1 files changed, 227 insertions(+), 0 deletions(-) create mode 100755 agent/src/com/cloud/agent/resource/HypervResource.java

diff --git a/agent/src/com/cloud/agent/resource/HypervResource.java
b/agent/src/com/cloud/agent/resource/HypervResource.java
new file mode 100755
index 0000000..8b8e89d
--- /dev/null
+++ b/agent/src/com/cloud/agent/resource/HypervResource.java
@@ -0,0 +1,227 @@
+// Licensed to the Apache Software Foundation (ASF) under one // or 
+more contributor license agreements.  See the NOTICE file // 
+distributed with this work for additional information // regarding 
+copyright ownership.  The ASF licenses this file // to you under the 
+Apache License, Version 2.0 (the // "License"); you may not use this 
+file except in compliance // with the License.  You may obtain a copy 
+of the License at

Later, the file index changes when the file is edited. E.g.

1.7.9


From fef4e3f291264224ed1430b3dff1e49bea7930c9 Mon Sep 17 00:00:00 2001
From: "U-CC-SVR11\\Administrator" <Administrator@CC-SVR11.(none)>
Date: Mon, 19 Nov 2012 15:41:26 +0000
Subject: [PATCH 09/96] Add min messages for host to register with the management server when it starts up.

---
.../com/cloud/agent/resource/HypervResource.java   |  200
++++++++++++++++++-
1 files changed, 189 insertions(+), 11 deletions(-)

diff --git a/agent/src/com/cloud/agent/resource/HypervResource.java
b/agent/src/com/cloud/agent/resource/HypervResource.java
index 8b8e89d..e810ce4 100755
--- a/agent/src/com/cloud/agent/resource/HypervResource.java
+++ b/agent/src/com/cloud/agent/resource/HypervResource.java
@@ -20,14 +20,15 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;
+import java.util.Set;
import java.util.UUID;

Solution

  • I figured out the answer before I got a chance to hit submit on the above question. Since the answer is not obvious, I will post it here:

    For a multi-commit patch, create via 'post-review' and not the ReviewBoard GUI.

    The problem is with adding a diff file that aggregates a bunch of patches. In my case, I've ~97 commits. Generating a patch for each commit git format-patch -s master gives you 97 different patches to review, which is unmanageable. Apache suggests dumping the patches into a single file with git format-patch master --stdout > ~/patch-name.patch (See Contributing to Apache CloudStack as a Non-Committer) Unfortunately, this causes problems when one patch is dependent on another.

    To avoid these issues, submit the commits as a single patch via the post-review command in RBTools (Review Board Tools, see install instructions. After installing RBTools, verify that your local git repo's origin/master is tracking the target for your code merge. E.g.

    $ git remote -v
    origin  https://git-wip-us.apache.org/repos/asf/incubator-cloudstack.git (fetch)
    origin  https://git-wip-us.apache.org/repos/asf/incubator-cloudstack.git (push)
    

    Also, set the target Review Board. E.g. to set for a repo, use the following command in the repo's root folder.

    git config reviewboard.url https://reviews.apache.org
    

    From the root of your local git repo, simply call post-review. It will gross up the changes between HEAD in the local repo and origin/master, create a review, and return the URL. You then flesh out the comments/summary/group using a browser.

    Enjoy!