[jira] [Updated] (LUCENE-5257) Lock down centralized versioning of ivy dependencies

2013-10-04 Thread Steve Rowe (JIRA)

 [ 
https://issues.apache.org/jira/browse/LUCENE-5257?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Steve Rowe updated LUCENE-5257:
---

Attachment: LUCENE-5257.patch

New patch with a few changes:

* Added orphan checking for {{/org/name}} coordinate keys in 
{{ivy-versions.properties}} file that are not referred to in any {{ivy.xml}} 
file.
* In order to add orphan checking, I had to make the task run only at the top 
level, so that it sees all the {{ivy.xml}} files across the whole project.  The 
simplest way to do that with the current build was to place the 
{{check-lib-versions}} target in {{lucene/build.xml}}, and then invoke it from 
the top-level {{validate}} target, recursively checking the {{ivy.xml}} files 
in the parent of the {{lucene/}} directory.  (This is a little clunky - really 
it should live at the top level - but I can live with it.)
* Cleaned up the {{ivy-versions.properties}} file, so that versions shared by 
two or more libs are represented as a property named for their org/groupId (and 
sometimes part of their name/artifactId if the org/groupId didn't seem to be 
sufficiently differentiating).

I'll commit later today if there are no objections.

 Lock down centralized versioning of ivy dependencies
 

 Key: LUCENE-5257
 URL: https://issues.apache.org/jira/browse/LUCENE-5257
 Project: Lucene - Core
  Issue Type: Improvement
  Components: general/build
Reporter: Steve Rowe
Assignee: Steve Rowe
Priority: Minor
 Attachments: LUCENE-5257.patch, LUCENE-5257.patch


 LUCENE-5249 introduced centralized versioning of 3rd party dependencies and 
 converted all ivy.xml files across Lucene/Solr to use this scheme.  But there 
 is nothing preventing people from ignoring this setup and (intentionally or 
 not) introducing non-centralized dependency versions.
 SOLR-3664 discusses the problem of out-of-sync 3rd party dependencies between 
 Lucene/Solr modules.  Centralized versioning makes synchronization problems 
 less likely but not impossible.
 One fairly simple way to ensure that all modules use the same version of 3rd 
 party deps would be to require that all deps in ivy.xml would have to use the 
 {{rev=$\{/org/name}}} syntax, via a validation script. 
 The problem remains that there may eventually be a *requirement* to use 
 different 3rd party libs in different modules.  Any form of lockdown here 
 should allow for this possibility.  Hoss's suggestion from a conversation on 
 #lucene IRC earlier today:
 {noformat}
   hoss perhaps exceptions could be by naming convetion
 sarowe can you give an example?
   hoss ie: variables must match either ${group}/${artifact} or they must 
 match
  /VERSION_MISTMATCH_EXCEPTION/${group}/${artifact}
 sarowe nice idea
  no external config required
   hoss right
  and it has to be real obvious when you are bucking convention
   hoss or better yet: ${group}/${artifact}/VERSION_MISTMATCH_EXCEPTION
  ... and there is another check that the version file is in ascii 
 order
  so you are garuntted that it has to be right there in the versions 
 file
  one line after ${group}/${artifact}
 sarowe i like it
   hoss no change someone updating ${group}/${artifact} won't notice it
  i suppose really it should be
  ${group}/${artifact}/VERSION_MISTMATCH_EXCEPTION/${reason}
  ... since you might have more then one exception per 
 ${group}/${artifact}
  but now i'm just making things up w/o evn really understanding
  the conventions you've alreay put in place
 sarowe :)
   hoss you get the idea
 sarowe yes
 {noformat}



--
This message was sent by Atlassian JIRA
(v6.1#6144)

-
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org



[jira] [Updated] (LUCENE-5257) Lock down centralized versioning of ivy dependencies

2013-10-04 Thread Steve Rowe (JIRA)

 [ 
https://issues.apache.org/jira/browse/LUCENE-5257?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Steve Rowe updated LUCENE-5257:
---

Attachment: LUCENE-5257.patch

Patch with cosmetic cleanups and a CHANGES.txt entry.

 Lock down centralized versioning of ivy dependencies
 

 Key: LUCENE-5257
 URL: https://issues.apache.org/jira/browse/LUCENE-5257
 Project: Lucene - Core
  Issue Type: Improvement
  Components: general/build
Reporter: Steve Rowe
Assignee: Steve Rowe
Priority: Minor
 Attachments: LUCENE-5257.patch, LUCENE-5257.patch, LUCENE-5257.patch


 LUCENE-5249 introduced centralized versioning of 3rd party dependencies and 
 converted all ivy.xml files across Lucene/Solr to use this scheme.  But there 
 is nothing preventing people from ignoring this setup and (intentionally or 
 not) introducing non-centralized dependency versions.
 SOLR-3664 discusses the problem of out-of-sync 3rd party dependencies between 
 Lucene/Solr modules.  Centralized versioning makes synchronization problems 
 less likely but not impossible.
 One fairly simple way to ensure that all modules use the same version of 3rd 
 party deps would be to require that all deps in ivy.xml would have to use the 
 {{rev=$\{/org/name}}} syntax, via a validation script. 
 The problem remains that there may eventually be a *requirement* to use 
 different 3rd party libs in different modules.  Any form of lockdown here 
 should allow for this possibility.  Hoss's suggestion from a conversation on 
 #lucene IRC earlier today:
 {noformat}
   hoss perhaps exceptions could be by naming convetion
 sarowe can you give an example?
   hoss ie: variables must match either ${group}/${artifact} or they must 
 match
  /VERSION_MISTMATCH_EXCEPTION/${group}/${artifact}
 sarowe nice idea
  no external config required
   hoss right
  and it has to be real obvious when you are bucking convention
   hoss or better yet: ${group}/${artifact}/VERSION_MISTMATCH_EXCEPTION
  ... and there is another check that the version file is in ascii 
 order
  so you are garuntted that it has to be right there in the versions 
 file
  one line after ${group}/${artifact}
 sarowe i like it
   hoss no change someone updating ${group}/${artifact} won't notice it
  i suppose really it should be
  ${group}/${artifact}/VERSION_MISTMATCH_EXCEPTION/${reason}
  ... since you might have more then one exception per 
 ${group}/${artifact}
  but now i'm just making things up w/o evn really understanding
  the conventions you've alreay put in place
 sarowe :)
   hoss you get the idea
 sarowe yes
 {noformat}



--
This message was sent by Atlassian JIRA
(v6.1#6144)

-
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org



[jira] [Updated] (LUCENE-5257) Lock down centralized versioning of ivy dependencies

2013-10-03 Thread Steve Rowe (JIRA)

 [ 
https://issues.apache.org/jira/browse/LUCENE-5257?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Steve Rowe updated LUCENE-5257:
---

Attachment: LUCENE-5257.patch

Patch implementing the idea as a custom Ant task: {{LibVersionCheckTask}}.

I had originally planned a scripted implementation, but I figured that could 
fail for valid {{ivy-version.properties}} syntax, or valid {{ivy.xml}} syntax, 
since a script would likely make assumptions about the format, so I went with 
full parsing for both, though I had to write the Properties file parser, since 
{{java.util.Properties}} doesn't provide file-order access to the parsed 
contents.

The new task checks the {{/org/name}} keys in the centralized versions file for 
lexical sort order and for duplicates, then verifies that the {{rev}} 
attributes for all {{dependency}}-s in all {{ivy.xml}} files in the current 
directory ({{lucene/}} and {{solr/}}) and below are formatted in 
{{$\{/org/name}}} format, where {{org}} matches the value of the org 
attribute, and {{name}} matches the value of the name attribute.

I modeled it on (and stole a lot of it from) the custom {{LicenseCheckTask}}.

The patch includes a fix to the {{ivy-versions.properties}} file that the new 
task found: there are currently duplicate property keys for two of the 
httpcomponents jars.

Like {{LicenseCheckTask}}, I made it run with the {{validate}} target, so it'll 
be included with {{ant precommit}}.

Run alone, it took less than a tenth of second in each of {{lucene/}} and 
{{solr/}} on my machine.

I think it's ready to go.

 Lock down centralized versioning of ivy dependencies
 

 Key: LUCENE-5257
 URL: https://issues.apache.org/jira/browse/LUCENE-5257
 Project: Lucene - Core
  Issue Type: Improvement
  Components: general/build
Reporter: Steve Rowe
Assignee: Steve Rowe
Priority: Minor
 Attachments: LUCENE-5257.patch


 LUCENE-5249 introduced centralized versioning of 3rd party dependencies and 
 converted all ivy.xml files across Lucene/Solr to use this scheme.  But there 
 is nothing preventing people from ignoring this setup and (intentionally or 
 not) introducing non-centralized dependency versions.
 SOLR-3664 discusses the problem of out-of-sync 3rd party dependencies between 
 Lucene/Solr modules.  Centralized versioning makes synchronization problems 
 less likely but not impossible.
 One fairly simple way to ensure that all modules use the same version of 3rd 
 party deps would be to require that all deps in ivy.xml would have to use the 
 {{rev=$\{/org/name}}} syntax, via a validation script. 
 The problem remains that there may eventually be a *requirement* to use 
 different 3rd party libs in different modules.  Any form of lockdown here 
 should allow for this possibility.  Hoss's suggestion from a conversation on 
 #lucene IRC earlier today:
 {noformat}
   hoss perhaps exceptions could be by naming convetion
 sarowe can you give an example?
   hoss ie: variables must match either ${group}/${artifact} or they must 
 match
  /VERSION_MISTMATCH_EXCEPTION/${group}/${artifact}
 sarowe nice idea
  no external config required
   hoss right
  and it has to be real obvious when you are bucking convention
   hoss or better yet: ${group}/${artifact}/VERSION_MISTMATCH_EXCEPTION
  ... and there is another check that the version file is in ascii 
 order
  so you are garuntted that it has to be right there in the versions 
 file
  one line after ${group}/${artifact}
 sarowe i like it
   hoss no change someone updating ${group}/${artifact} won't notice it
  i suppose really it should be
  ${group}/${artifact}/VERSION_MISTMATCH_EXCEPTION/${reason}
  ... since you might have more then one exception per 
 ${group}/${artifact}
  but now i'm just making things up w/o evn really understanding
  the conventions you've alreay put in place
 sarowe :)
   hoss you get the idea
 sarowe yes
 {noformat}



--
This message was sent by Atlassian JIRA
(v6.1#6144)

-
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org