[JGIT PATCH 4/6] Add the remote.name.mirror flag to RemoteConfig

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux