This flag is currently only honored by "git push" to delete remote refs if they are also gone on the source side. It also causes the default push spec to be "+refs/*:refs/*" if the user hasn't given us any other push specs. This change only implements the config file parsing for the mirror flag, as there's still a chunk of code needed on the transport to actually honor it. Signed-off-by: Shawn O. Pearce <spearce@xxxxxxxxxxx> --- .../org/spearce/jgit/transport/RemoteConfig.java | 40 +++++++++++++++++++- 1 files changed, 39 insertions(+), 1 deletions(-) diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteConfig.java b/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteConfig.java index 5bbf664..519a8a5 100644 --- a/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteConfig.java +++ b/org.spearce.jgit/src/org/spearce/jgit/transport/RemoteConfig.java @@ -68,6 +68,10 @@ private static final String KEY_TAGOPT = "tagopt"; + private static final String KEY_MIRROR = "mirror"; + + private static final boolean DEFAULT_MIRROR = false; + /** Default value for {@link #getUploadPack()} if not specified. */ public static final String DEFAULT_UPLOAD_PACK = "git-upload-pack"; @@ -114,6 +118,8 @@ private TagOpt tagopt; + private boolean mirror; + /** * Parse a remote block from an existing configuration file. * <p> @@ -163,6 +169,7 @@ public RemoteConfig(final RepositoryConfig rc, final String remoteName) val = rc.getString(SECTION, name, KEY_TAGOPT); tagopt = TagOpt.fromOption(val); + mirror = rc.getBoolean(SECTION, name, KEY_MIRROR, DEFAULT_MIRROR); } /** @@ -192,16 +199,29 @@ public void update(final RepositoryConfig rc) { set(rc, KEY_UPLOADPACK, getUploadPack(), DEFAULT_UPLOAD_PACK); set(rc, KEY_RECEIVEPACK, getReceivePack(), DEFAULT_RECEIVE_PACK); set(rc, KEY_TAGOPT, getTagOpt().option(), TagOpt.AUTO_FOLLOW.option()); + set(rc, KEY_MIRROR, mirror, DEFAULT_MIRROR); } private void set(final RepositoryConfig rc, final String key, final String currentValue, final String defaultValue) { if (defaultValue.equals(currentValue)) - rc.unsetString(SECTION, getName(), key); + unset(rc, key); else rc.setString(SECTION, getName(), key, currentValue); } + private void set(final RepositoryConfig rc, final String key, + final boolean currentValue, final boolean defaultValue) { + if (defaultValue == currentValue) + unset(rc, key); + else + rc.setBoolean(SECTION, getName(), key, currentValue); + } + + private void unset(final RepositoryConfig rc, final String key) { + rc.unsetString(SECTION, getName(), key); + } + /** * Get the local name this remote configuration is recognized as. * @@ -382,4 +402,22 @@ public TagOpt getTagOpt() { public void setTagOpt(final TagOpt option) { tagopt = option != null ? option : TagOpt.AUTO_FOLLOW; } + + /** + * @return true if pushing to the remote automatically deletes remote refs + * which don't exist on the source side. + */ + public boolean isMirror() { + return mirror; + } + + /** + * Set the mirror flag to automatically delete remote refs. + * + * @param m + * true to automatically delete remote refs during push. + */ + public void setMirror(final boolean m) { + mirror = m; + } } -- 1.6.2.rc0.226.gf08f -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html