{"thread":{"id":"15238","subject":"[JGIT PATCH 0/3] Fix local tracking refs updates during push","startedAt":"2008-08-28T02:32:46Z","lastAt":"2008-08-28T02:32:49Z","messageCount":4,"participants":["Marek Zawirski"],"isPatch":true,"patchVersion":1,"patchTotal":3},"messages":[{"id":"88853","messageId":"1219890769-20119-1-git-send-email-marek.zawirski@gmail.com","threadId":"15238","inReplyTo":null,"subject":"[JGIT PATCH 0/3] Fix local tracking refs updates during push","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-08-28T02:32:46Z","receivedAt":"2008-08-28T02:32:46Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"This series address http://code.google.com/p/egit/issues/detail?id=18\nissue: PushProcess does not delete local tracking branches\n\nBTW, I discovered that C Git always force update local tracking refs\nupon successful push, so I also fixed it.\n\nMarek Zawirski (3):\n  Fix push's RemoteRefUpdate to always force update local\n    TrackingRefUpdate\n  Add another delete method in RefUpdate, reusing RevWalk\n  Fix RemoteRefUpdate to delete local tracking ref upon successful\n    deletion\n\n .../src/org/spearce/jgit/lib/RefUpdate.java        |   22 ++++++++++++++++++-\n .../spearce/jgit/transport/RemoteRefUpdate.java    |    7 ++++-\n .../spearce/jgit/transport/TrackingRefUpdate.java  |    4 +++\n 3 files changed, 29 insertions(+), 4 deletions(-)\n"},{"id":"88855","messageId":"1219890769-20119-2-git-send-email-marek.zawirski@gmail.com","threadId":"15238","inReplyTo":"1219890769-20119-1-git-send-email-marek.zawirski@gmail.com","subject":"[JGIT PATCH 1/3] Fix push's RemoteRefUpdate to always force update local TrackingRefUpdate","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-08-28T02:32:47Z","receivedAt":"2008-08-28T02:32:47Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"Now, we force update local tracking ref even if we do not force remote\nref update. It seems to be sensible approach (C git one) assuming that our\nrepository may be out of sync with the remote one.\nThe potentially lost information  here isn't so valuable perhaps.\n\nSigned-off-by: Marek Zawirski <marek.zawirski@gmail.com>\n---\n .../spearce/jgit/transport/RemoteRefUpdate.java    |    2 +-\n 1 files changed, 1 insertions(+), 1 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteRefUpdate.java b/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteRefUpdate.java\nindex fd19300..623599f 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteRefUpdate.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteRefUpdate.java\n@@ -189,7 +189,7 @@ public RemoteRefUpdate(final Repository localDb, final String srcRef,\n \t\tthis.forceUpdate = forceUpdate;\n \t\tif (localName != null && localDb != null)\n \t\t\ttrackingRefUpdate = new TrackingRefUpdate(localDb, localName,\n-\t\t\t\t\tremoteName, forceUpdate, newObjectId, \"push\");\n+\t\t\t\t\tremoteName, true, newObjectId, \"push\");\n \t\telse\n \t\t\ttrackingRefUpdate = null;\n \t\tthis.localDb = localDb;\n-- \n1.5.6.3\n"},{"id":"88854","messageId":"1219890769-20119-3-git-send-email-marek.zawirski@gmail.com","threadId":"15238","inReplyTo":"1219890769-20119-2-git-send-email-marek.zawirski@gmail.com","subject":"[JGIT PATCH 2/3] Add another delete method in RefUpdate, reusing RevWalk","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-08-28T02:32:48Z","receivedAt":"2008-08-28T02:32:48Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"This is similar to update() approach when caller has possiblity to\nchoose between providing RevWalk instance on its own or let RefUpdate\ncreate one.\n\nSigned-off-by: Marek Zawirski <marek.zawirski@gmail.com>\n---\n .../src/org/spearce/jgit/lib/RefUpdate.java        |   22 ++++++++++++++++++-\n 1 files changed, 20 insertions(+), 2 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/RefUpdate.java b/org.spearce.jgit/src/org/spearce/jgit/lib/RefUpdate.java\nindex c6536e3..e9c0e77 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/lib/RefUpdate.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/RefUpdate.java\n@@ -325,11 +325,30 @@ public Result update(final RevWalk walk) throws IOException {\n \n \t/**\n \t * Delete the ref.\n+\t * <p>\n+\t * This is the same as:\n+\t * \n+\t * <pre>\n+\t * return delete(new RevWalk(repository));\n+\t * </pre>\n \t * \n \t * @return the result status of the delete.\n \t * @throws IOException\n \t */\n \tpublic Result delete() throws IOException {\n+\t\treturn delete(new RevWalk(db.getRepository()));\n+\t}\n+\n+\t/**\n+\t * Delete the ref.\n+\t * \n+\t * @param walk\n+\t *            a RevWalk instance this delete command can borrow to perform\n+\t *            the merge test. The walk will be reset to perform the test.\n+\t * @return the result status of the delete.\n+\t * @throws IOException\n+\t */\n+\tpublic Result delete(final RevWalk walk) throws IOException {\n \t\tif (name.startsWith(Constants.R_HEADS)) {\n \t\t\tfinal Ref head = db.readRef(Constants.HEAD);\n \t\t\tif (head != null && name.equals(head.getName()))\n@@ -337,8 +356,7 @@ public Result delete() throws IOException {\n \t\t}\n \n \t\ttry {\n-\t\t\treturn updateImpl(new RevWalk(db.getRepository()),\n-\t\t\t\t\tnew DeleteStore());\n+\t\t\treturn updateImpl(walk, new DeleteStore());\n \t\t} catch (IOException x) {\n \t\t\tresult = Result.IO_FAILURE;\n \t\t\tthrow x;\n-- \n1.5.6.3\n"},{"id":"88856","messageId":"1219890769-20119-4-git-send-email-marek.zawirski@gmail.com","threadId":"15238","inReplyTo":"1219890769-20119-3-git-send-email-marek.zawirski@gmail.com","subject":"[JGIT PATCH 3/3] Fix RemoteRefUpdate to delete local tracking ref upon successful deletion","fromName":"Marek Zawirski","fromEmail":"marek.zawirski@gmail.com","sentAt":"2008-08-28T02:32:49Z","receivedAt":"2008-08-28T02:32:49Z","isPatch":true,"sender":{"key":"marek.zawirski@gmail.com","avatar":null},"body":"When remote ref update specification is a deletion, local tracking ref\nshould also be deleted, not updated.\n\nReported-by: Shawn O. Pearce <spearce@spearce.org>\nSigned-off-by: Marek Zawirski <marek.zawirski@gmail.com>\n---\n .../spearce/jgit/transport/RemoteRefUpdate.java    |    5 ++++-\n .../spearce/jgit/transport/TrackingRefUpdate.java  |    4 ++++\n 2 files changed, 8 insertions(+), 1 deletions(-)\n\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteRefUpdate.java b/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteRefUpdate.java\nindex 623599f..c79f7dc 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteRefUpdate.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteRefUpdate.java\n@@ -336,6 +336,9 @@ protected void setMessage(final String message) {\n \t *             when I/O error occurred during update\n \t */\n \tprotected void updateTrackingRef(final RevWalk walk) throws IOException {\n-\t\ttrackingRefUpdate.update(walk);\n+\t\tif (isDelete())\n+\t\t\ttrackingRefUpdate.delete(walk);\n+\t\telse\n+\t\t\ttrackingRefUpdate.update(walk);\n \t}\n }\ndiff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/TrackingRefUpdate.java b/org.spearce.jgit/src/org/spearce/jgit/transport/TrackingRefUpdate.java\nindex a84b38a..ac74728 100644\n--- a/org.spearce.jgit/src/org/spearce/jgit/transport/TrackingRefUpdate.java\n+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/TrackingRefUpdate.java\n@@ -127,4 +127,8 @@ public Result getResult() {\n \tvoid update(final RevWalk walk) throws IOException {\n \t\tupdate.update(walk);\n \t}\n+\n+\tvoid delete(final RevWalk walk) throws IOException {\n+\t\tupdate.delete(walk);\n+\t}\n }\n-- \n1.5.6.3\n"}]}