From f06a3a814c511e251d140c79ac5abad6c91ed73e Mon Sep 17 00:00:00 2001 From: Adrian Gonzalez Date: Fri, 15 Dec 2017 15:41:32 -0500 Subject: [PATCH] Add checkbox for atomic flag (fixes #57) --- .../bitbucket/hook/MirrorRepositoryHook.java | 16 ++++++++++++---- .../resources/i18n/stash-hook-mirror.properties | 6 +++--- .../resources/static/mirror-repository-hook.soy | 6 +++++- .../bitbucket/hook/MirrorRepositoryHookTest.java | 1 + 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/englishtown/bitbucket/hook/MirrorRepositoryHook.java b/src/main/java/com/englishtown/bitbucket/hook/MirrorRepositoryHook.java index dd3fbc0..e6c8a7d 100644 --- a/src/main/java/com/englishtown/bitbucket/hook/MirrorRepositoryHook.java +++ b/src/main/java/com/englishtown/bitbucket/hook/MirrorRepositoryHook.java @@ -38,6 +38,7 @@ public class MirrorRepositoryHook implements AsyncPostReceiveRepositoryHook, Rep String refspec; boolean tags; boolean notes; + boolean atomic; } public static final String PLUGIN_SETTINGS_KEY = "com.englishtown.stash.hook.mirror"; @@ -47,6 +48,7 @@ public class MirrorRepositoryHook implements AsyncPostReceiveRepositoryHook, Rep static final String SETTING_REFSPEC = "refspec"; static final String SETTING_TAGS = "tags"; static final String SETTING_NOTES = "notes"; + static final String SETTING_ATOMIC = "atomic"; static final int MAX_ATTEMPTS = 5; static final String DEFAULT_REFSPEC = "+refs/heads/*:refs/heads/*"; @@ -139,10 +141,14 @@ public class MirrorRepositoryHook implements AsyncPostReceiveRepositoryHook, Rep // Do not use the mirror flag as pull-request refs are included builder.command("push") .argument("--prune") // this deletes locally deleted branches - .argument("--atomic") // use an atomic transaction to have a consistent state .argument(authenticatedUrl) .argument("--force"); + // Use an atomic transaction to have a consistent state + if (settings.atomic) { + builder.argument("--atomic"); + } + // Add refspec args String refspecs = Strings.isNullOrEmpty(settings.refspec) ? DEFAULT_REFSPEC : settings.refspec; for (String refspec : refspecs.split("\\s|\\n")) { @@ -218,7 +224,7 @@ public class MirrorRepositoryHook implements AsyncPostReceiveRepositoryHook, Rep boolean ok = true; logger.debug("MirrorRepositoryHook: validate started."); - List mirrorSettings = getMirrorSettings(settings, false, false); + List mirrorSettings = getMirrorSettings(settings, false, false, false); for (MirrorSettings ms : mirrorSettings) { if (!validate(ms, settings, errors)) { @@ -242,10 +248,10 @@ public class MirrorRepositoryHook implements AsyncPostReceiveRepositoryHook, Rep } protected List getMirrorSettings(Settings settings) { - return getMirrorSettings(settings, true, true); + return getMirrorSettings(settings, true, true, true); } - protected List getMirrorSettings(Settings settings, boolean defTags, boolean defNotes) { + protected List getMirrorSettings(Settings settings, boolean defTags, boolean defNotes, boolean defAtomic) { List results = new ArrayList<>(); Map allSettings = settings.asMap(); @@ -262,6 +268,7 @@ public class MirrorRepositoryHook implements AsyncPostReceiveRepositoryHook, Rep ms.refspec = (settings.getString(SETTING_REFSPEC + suffix, "")); ms.tags = (settings.getBoolean(SETTING_TAGS + suffix, defTags)); ms.notes = (settings.getBoolean(SETTING_NOTES + suffix, defNotes)); + ms.atomic = (settings.getBoolean(SETTING_ATOMIC + suffix, defAtomic)); ms.suffix = String.valueOf(count++); results.add(ms); @@ -336,6 +343,7 @@ public class MirrorRepositoryHook implements AsyncPostReceiveRepositoryHook, Rep values.put(SETTING_REFSPEC + ms.suffix, ms.refspec); values.put(SETTING_TAGS + ms.suffix, ms.tags); values.put(SETTING_NOTES + ms.suffix, ms.notes); + values.put(SETTING_ATOMIC + ms.suffix, ms.atomic); } // Unfortunately the settings are stored in an immutable map, so need to cheat with reflection diff --git a/src/main/resources/i18n/stash-hook-mirror.properties b/src/main/resources/i18n/stash-hook-mirror.properties index d4f3fee..b256001 100644 --- a/src/main/resources/i18n/stash-hook-mirror.properties +++ b/src/main/resources/i18n/stash-hook-mirror.properties @@ -14,6 +14,6 @@ mirror-repository-hook.password.description=The password to use for pushing to t mirror-repository-hook.refspec.label=Refspecs mirror-repository-hook.refspec.description=The git refspec(s) to mirror (defaults to +refs/heads/*:refs/heads/*) -mirror-repository-hook.tags.label=Tags -mirror-repository-hook.notes.label=Notes -mirror-repository-hook.tags-notes.description=Whether to mirror tags and notes (ie. +refs/tags/*:refs/tags/* and +refs/notes/*:refs/notes/*) +mirror-repository-hook.tags.label=Tags (ie. +refs/tags/*:refs/tags/*) +mirror-repository-hook.notes.label=Notes (ie. +refs/notes/*:refs/notes/*) +mirror-repository-hook.atomic.label=Atomic diff --git a/src/main/resources/static/mirror-repository-hook.soy b/src/main/resources/static/mirror-repository-hook.soy index ea832a2..71026d3 100644 --- a/src/main/resources/static/mirror-repository-hook.soy +++ b/src/main/resources/static/mirror-repository-hook.soy @@ -93,9 +93,13 @@ 'id' : 'notes' + $index, 'labelText': getText('mirror-repository-hook.notes.label'), 'isChecked' : $config['notes' + $index] != false + ], + [ + 'id' : 'atomic' + $index, + 'labelText': getText('mirror-repository-hook.atomic.label'), + 'isChecked' : $config['atomic' + $index] != false ] ] /} - {param descriptionText: getText('mirror-repository-hook.tags-notes.description') /} {/call} diff --git a/src/test/java/com/englishtown/bitbucket/hook/MirrorRepositoryHookTest.java b/src/test/java/com/englishtown/bitbucket/hook/MirrorRepositoryHookTest.java index 0f8f7c8..98a0442 100644 --- a/src/test/java/com/englishtown/bitbucket/hook/MirrorRepositoryHookTest.java +++ b/src/test/java/com/englishtown/bitbucket/hook/MirrorRepositoryHookTest.java @@ -289,6 +289,7 @@ public class MirrorRepositoryHookTest { when(settings.getString(eq(MirrorRepositoryHook.SETTING_REFSPEC), eq(""))).thenReturn(refspec); when(settings.getBoolean(eq(MirrorRepositoryHook.SETTING_TAGS), eq(true))).thenReturn(true); when(settings.getBoolean(eq(MirrorRepositoryHook.SETTING_NOTES), eq(true))).thenReturn(true); + when(settings.getBoolean(eq(MirrorRepositoryHook.SETTING_ATOMIC), eq(true))).thenReturn(true); return settings; } }