From 49a10aa8753fa0d36abc494632ca6ef1545b74bc Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 4 Dec 2012 21:16:00 +0100 Subject: [PATCH 1/9] store mercurial specific revisions as changeset properties --- .../spi/javahg/HgLogChangesetCommand.java | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgLogChangesetCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgLogChangesetCommand.java index 07dddf4883..837e332ca3 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgLogChangesetCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgLogChangesetCommand.java @@ -88,6 +88,15 @@ public class HgLogChangesetCommand extends AbstractCommand private static final String NULL_ID = "0000000000000000000000000000000000000000"; + /** changeset property for parent1 revision */ + private static final String PROPERTY_PARENT1_REVISION = "hg.parent1.revision"; + + /** changeset property for parent2 revision */ + private static final String PROPERTY_PARENT2_REVISION = "hg.parent2.revision"; + + /** changeset property for node revision */ + private static final String PROPERTY_REVISION = "hg.revision"; + //~--- constructors --------------------------------------------------------- /** @@ -262,7 +271,7 @@ public class HgLogChangesetCommand extends AbstractCommand { Changeset changeset = new Changeset(); - changeset.setId(readId(in)); + changeset.setId(readId(in, changeset, PROPERTY_REVISION)); String user = in.textUpTo('\n'); @@ -279,14 +288,14 @@ public class HgLogChangesetCommand extends AbstractCommand changeset.getBranches().add(branch); } - String p1 = readId(in); + String p1 = readId(in, changeset, PROPERTY_PARENT1_REVISION); if (!isNullId(p1)) { changeset.getParents().add(p1); } - String p2 = readId(in); + String p2 = readId(in, changeset, PROPERTY_PARENT2_REVISION); if (!isNullId(p2)) { @@ -367,38 +376,30 @@ public class HgLogChangesetCommand extends AbstractCommand * * * @param in + * @param changeset + * @param propertyKey * * @return * * @throws IOException */ - private String readId(HgInputStream in) throws IOException + private String readId(HgInputStream in, Changeset changeset, + String propertyKey) + throws IOException { - String nodeString = null; - if (config.isShowRevisionInId()) { Integer rev = in.readDecimal(); if (rev != null) { - nodeString = String.valueOf(rev); + changeset.setProperty(propertyKey, String.valueOf(rev)); } - else - { - nodeString = "-1"; - } - - in.upTo(':'); - nodeString = nodeString.concat(":").concat(in.nextAsText(40)); - } - else - { - in.upTo(':'); - nodeString = in.nextAsText(40); } - return nodeString; + in.upTo(':'); + + return in.nextAsText(40); } /** From 80c500cbf8351160aa2f37155ff3d93c5836fd34 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 4 Dec 2012 21:29:04 +0100 Subject: [PATCH 2/9] separate methods to render changeset ids --- .../sonia.repository.changesetviewergrid.js | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.changesetviewergrid.js b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.changesetviewergrid.js index c5056a0bd7..de64d37094 100644 --- a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.changesetviewergrid.js +++ b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.changesetviewergrid.js @@ -203,21 +203,21 @@ Sonia.repository.ChangesetViewerGrid = Ext.extend(Ext.grid.GridPanel, { } return result; }, + + getChangesetId: function(id, record){ + return id; + }, + + getParentIds: function(id, record){ + return record.get('parents'); + }, renderIds: function(value, p, record){ - var parent = null; - var parent2 = null; - var parents = record.get('parents'); - if ( parents ){ - parent = parents[0]; - if ( parents.length >= 1 ){ - parent2 = parents[1]; - } - } + var parents = this.getParentIds(value, record); return this.idsTemplate.apply({ - id: value, - parent: parent, - parent2: parent2 + id: this.getChangesetId(value, record), + parent: parents[0], + parent2: parents[1] }); }, From 677e822f7b850cb7d894f086072bfcb47514e416 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 4 Dec 2012 21:38:43 +0100 Subject: [PATCH 3/9] prepare mercurial plugin to render changeset ids with revision --- .../src/main/resources/sonia/scm/hg.config.js | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js index 62549df4eb..9947ce7e18 100644 --- a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js +++ b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js @@ -245,3 +245,28 @@ registerConfigPanel({ // register type icon Sonia.repository.typeIcons['hg'] = 'resources/images/icons/16x16/mercurial.png'; + +// override ChangesetViewerGrid to render changeset id's with revisions + +Ext.override(Sonia.repository.ChangesetViewerGrid, { + + isMercurialRepository: function(){ + return this.repository.type == 'hg'; + }, + + getChangesetId: function(id, record){ + if ( this.isMercurialRepository() ){ + // TODO implement + } + return id; + }, + + getParentIds: function(id, record){ + var parents = record.get('parents'); + if ( this.isMercurialRepository() ){ + // TODO implement + } + return parents; + } + +}); \ No newline at end of file From 272fb1ea17f9274130c714b98d43ebb9f495fe4c Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 4 Dec 2012 21:56:19 +0100 Subject: [PATCH 4/9] fix js error if no parent1 is available --- .../sonia.repository.changesetviewergrid.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.changesetviewergrid.js b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.changesetviewergrid.js index de64d37094..a30072ef0f 100644 --- a/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.changesetviewergrid.js +++ b/scm-webapp/src/main/webapp/resources/js/repository/sonia.repository.changesetviewergrid.js @@ -214,10 +214,18 @@ Sonia.repository.ChangesetViewerGrid = Ext.extend(Ext.grid.GridPanel, { renderIds: function(value, p, record){ var parents = this.getParentIds(value, record); + var parent1 = null; + var parent2 = null; + if ( parents ){ + parent1 = parents[0]; + if (parents.length > 1){ + parent2 = parents[1]; + } + } return this.idsTemplate.apply({ id: this.getChangesetId(value, record), - parent: parents[0], - parent2: parents[1] + parent: parent1, + parent2: parent2 }); }, From d60601b2774e9c18ae91a9c7184f601e6fc52b7a Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 4 Dec 2012 22:00:58 +0100 Subject: [PATCH 5/9] added util method to get property value from properties array --- .../main/webapp/resources/js/util/sonia.util.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/scm-webapp/src/main/webapp/resources/js/util/sonia.util.js b/scm-webapp/src/main/webapp/resources/js/util/sonia.util.js index 87e4709484..1845efd1ae 100644 --- a/scm-webapp/src/main/webapp/resources/js/util/sonia.util.js +++ b/scm-webapp/src/main/webapp/resources/js/util/sonia.util.js @@ -178,4 +178,18 @@ if (!Array.prototype.filter) { return results; } +} + +Sonia.util.getProperty = function(properties, key){ + var value = null; + if ( properties != null ){ + for (var i=0; i Date: Tue, 4 Dec 2012 22:03:27 +0100 Subject: [PATCH 6/9] BasicPropertiesAware should be implement Serializable --- .../src/main/java/sonia/scm/BasicPropertiesAware.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/scm-core/src/main/java/sonia/scm/BasicPropertiesAware.java b/scm-core/src/main/java/sonia/scm/BasicPropertiesAware.java index d273e88e98..2c39444495 100644 --- a/scm-core/src/main/java/sonia/scm/BasicPropertiesAware.java +++ b/scm-core/src/main/java/sonia/scm/BasicPropertiesAware.java @@ -39,6 +39,8 @@ import sonia.scm.xml.XmlMapStringAdapter; //~--- JDK imports ------------------------------------------------------------ +import java.io.Serializable; + import java.util.HashMap; import java.util.Map; @@ -52,9 +54,14 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; * @author Sebastian Sdorra */ @XmlAccessorType(XmlAccessType.FIELD) -public class BasicPropertiesAware implements PropertiesAware +public class BasicPropertiesAware implements PropertiesAware, Serializable { + /** Field description */ + private static final long serialVersionUID = -536608122577385802L; + + //~--- methods -------------------------------------------------------------- + /** * {@inheritDoc} * From 8eb6dff48d4656a81a735f4b8f53f24be5f9264b Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Fri, 7 Dec 2012 09:55:26 +0100 Subject: [PATCH 7/9] fix missing p2 revision and use shorter property names --- .../repository/spi/javahg/HgLogChangesetCommand.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgLogChangesetCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgLogChangesetCommand.java index 837e332ca3..0cd96facd0 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgLogChangesetCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgLogChangesetCommand.java @@ -89,13 +89,13 @@ public class HgLogChangesetCommand extends AbstractCommand "0000000000000000000000000000000000000000"; /** changeset property for parent1 revision */ - private static final String PROPERTY_PARENT1_REVISION = "hg.parent1.revision"; + private static final String PROPERTY_PARENT1_REVISION = "hg.p1.rev"; /** changeset property for parent2 revision */ - private static final String PROPERTY_PARENT2_REVISION = "hg.parent2.revision"; + private static final String PROPERTY_PARENT2_REVISION = "hg.p2.rev"; /** changeset property for node revision */ - private static final String PROPERTY_REVISION = "hg.revision"; + private static final String PROPERTY_REVISION = "hg.rev"; //~--- constructors --------------------------------------------------------- @@ -294,6 +294,8 @@ public class HgLogChangesetCommand extends AbstractCommand { changeset.getParents().add(p1); } + + in.mustMatch(' '); String p2 = readId(in, changeset, PROPERTY_PARENT2_REVISION); @@ -391,7 +393,7 @@ public class HgLogChangesetCommand extends AbstractCommand { Integer rev = in.readDecimal(); - if (rev != null) + if (rev != null && rev >= 0) { changeset.setProperty(propertyKey, String.valueOf(rev)); } From 1b757862f609f6ef50a31c4c7d0d2bce729fb9b5 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Fri, 7 Dec 2012 09:56:31 +0100 Subject: [PATCH 8/9] implement revision label in changeset grid for mercurial repositories --- .../src/main/resources/sonia/scm/hg.config.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js index 9947ce7e18..9ea80a51b3 100644 --- a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js +++ b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js @@ -256,7 +256,10 @@ Ext.override(Sonia.repository.ChangesetViewerGrid, { getChangesetId: function(id, record){ if ( this.isMercurialRepository() ){ - // TODO implement + var rev = Sonia.util.getProperty(record.get('properties'), 'hg.rev'); + if ( rev ){ + id = rev + ':' + id; + } } return id; }, @@ -264,7 +267,19 @@ Ext.override(Sonia.repository.ChangesetViewerGrid, { getParentIds: function(id, record){ var parents = record.get('parents'); if ( this.isMercurialRepository() ){ - // TODO implement + if ( parents && parents.length > 0 ){ + var properties = record.get('properties'); + var rev = Sonia.util.getProperty(properties, 'hg.p1.rev'); + if (rev){ + parents[0] = rev + ':' + parents[0]; + } + if ( parents.length > 1 ){ + rev = Sonia.util.getProperty(properties, 'hg.p2.rev'); + if (rev){ + parents[1] = rev + ':' + parents[1]; + } + } + } } return parents; } From 012895db6be6faa91a382763b24d8958b5332e19 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Fri, 7 Dec 2012 09:59:44 +0100 Subject: [PATCH 9/9] close branch issue-287