Given the general amount of attention that the community gives core changes, I think there is little reason to fear uncontrolled IT changes.
Simply put; my fear of IT's *not* getting updated/maintained far exceeds my fear of an erronous update creeping in (which is why in surefire the IT's run by default with no option to turn them off other than -DskipTests ;) It seems to me we've covered all the important bases on this one; I'll summarize breiefly in a separate mail. Kristian 2012/10/12 Igor Fedorenko <i...@ifedorenko.com> > Although I understand we can make the merged repository work, at least > with some discipline from developers, I think merged source repository > makes changes to the integration tests perceptually "okay", which imho > is rarely the case. I actually maintained fork of maven ITs for > awhile, and personally I did not find it too much trouble. At least as > long as I was only adding new ITs, not changing existing ones. > > Just my 2c. > > -- > Regards, > Igor > > > On 12-10-12 3:47 AM, Kristian Rosenvold wrote: > >> My mails came out sort-of in the wrong order, and I'm not sure if I agree >> with myself on splitting it changes <-> core changes. >> >> There is no technical mandate for this, not even a practical one since >> establishing mergeability from 2.2.1 -> 3.X turned out to be simple. >> >> But as a personal work habit it's smart, because it allows you to change >> your mind easily. >> >> Let's say I want to fix MNG-9999 on 3.X. I make an IT from a submitted >> sample project and I commit that on the 3.X branch. >> Now someone really wants that fixed back on 2.2.1, and it turns out the >> backport is real simple. All they need to do is cherry pick the IT and the >> core change back to 2.2.1. The IT always cherry-picks cleanly (more or >> less >> by definition due to the way we make IT's), but the core change does not, >> so the fix had to be re-applied on 2.2.1. When we merge 2.2.1 back to 3.X, >> git will automatically understand that the cherry-picked IT exists "in the >> future" and it won't trouble me with it. If the core change had been part >> of the IT commit I would lose this benefit, since the diffs become >> different (lol). >> >> (A diff that already exists in the history won't be reapplied, which is >> why >> it's so good to move *complete* commits backwards in time). >> >> Kristian >> >> >> 2012/10/12 Arnaud Héritier <aherit...@gmail.com> >> >> "It may still be a good idea to do IT and core-change as two different >>> commits" >>> If we merge core and ITs I think it will be important to do it (and thus >>> to >>> ask it to contributors - or we'll need to do it on our side). >>> I always see few reasons to merge them and find the process a little bit >>> complex (especially if the committer isn't a Git Guru) but I admit that I >>> won't bit impacted by this choice as my core contributions were (and will >>> probably continue to be) near to nothing. >>> Even if I really support the Git migration I don't want that we decrease >>> the ability to contribute (it is already a big issue) >>> >>> Arnaud >>> >>> On Fri, Oct 12, 2012 at 8:34 AM, Kristian Rosenvold < >>> kristian.rosenv...@gmail.com> wrote: >>> >>> Btw; this simplifies the overall workflow to: "Check out the oldest >>>> >>> version >>> >>>> you want to support this feature and add your IT + change there. It may >>>> still be a good idea to do IT and core-change as two different commits" >>>> >>>> Kristian >>>> >>>> >>>> 2012/10/12 Kristian Rosenvold <kristian.rosenv...@gmail.com> >>>> >>>> I could not resist, I made this repo and it works well: git clone >>>>> https://github.com/krosenvold/**maven-rc.git<https://github.com/krosenvold/maven-rc.git> >>>>> >>>>> It has reconstructed mergeability between 2.2.1 and 3.X, and the IT's >>>>> >>>> were >>>> >>>>> added at 2.2.1 and merged up to 3.X. Which means we have a straight >>>>> >>>> merge >>> >>>> based workflow from 2.2.1 and on. Pre 2.2.1 versions are not supported >>>>> >>>> for >>>> >>>>> this mode of operation. >>>>> >>>>> Note: Older tags (pre. 2.2.0) will have to be reconstructed by hand >>>>> >>>> once >>> >>>> we flip. Also; the pom.xml and the site in this merged repo contain >>>>> >>>> only >>> >>>> the "core" pom (changes from core-its pom.xml and site will have to be >>>>> merged by hand) >>>>> >>>>> Btw: In this repo, you can checkout trunk (3.X and do "git diff >>>>> >>>> ...2.2.X" >>>> >>>>> and see what changes have been added to 2.2.X. Note three ...'s) >>>>> >>>>> Kristian >>>>> >>>>> >>>>> 2012/10/12 Kristian Rosenvold <kristian.rosenv...@gmail.com> >>>>> >>>>> NIce use case, this is where things get interesting ;) Initially I'll >>>>>> just add that this is one of those workflows that might be easier >>>>>> >>>>> with a >>> >>>> separate IT repo. This is how the flow would be in a merged single >>>>>> >>>>> repo: >>> >>>> >>>>>> This workflow has two distinct modes of operation: >>>>>> >>>>>> 1. You always check out the oldest appropriate branch to make the IT. >>>>>> >>>>> So >>> >>>> if the IT should apply to 2.2.1 you should check that out. (If we need >>>>>> >>>>> to >>>> >>>>> make IT's that go even further back I think it might be easiest to >>>>>> >>>>> just >>> >>>> keep the IT's in a separate repo since it gets really hard to actually >>>>>> *make* that repo.) >>>>>> >>>>>> 2 A) You are working in a "properly" branched structure that is >>>>>> >>>>> mergeable >>>> >>>>> ; i.e. what we might do between 3.0.X and 3.1 or maybe more >>>>>> >>>>> appropriately >>>> >>>>> between 3.X and 4.X. >>>>>> >>>>>> Make all the changes your heart desires, in any kind of commit >>>>>> >>>>> sequence >>> >>>> you prefer. The downstream merge to the subsequent version will fix it >>>>>> >>>>> all. >>>> >>>>> >>>>>> 2 B) You are working i an unmergable branch structure (2.2.1->3.0) >>>>>> >>>>>> Add the IT as a distinct commit on the 2.2.1 branch, make sure any >>>>>> bug-fix you do is done as a separate commit from the IT. When done, >>>>>> >>>>> you >>> >>>> will need to check out the 3.0.X branch and cherry pick the commit >>>>>> >>>>> with >>> >>>> the >>>> >>>>> IT. From 3.0.X on it will merge properly. cherry-picking is a manual >>>>>> operation and if you forget it, the IT will be "lost" on 2.2.1 >>>>>> >>>>>> While this all may seem a bit complex, it's basically the nuts & bolts >>>>>> >>>>> of >>>> >>>>> how day-to-day life of a branched workflow functions. When working in >>>>>> >>>>> older >>>> >>>>> history, it's usually wise to partition work into well-defined >>>>>> >>>>> commits, >>> >>>> because sometimes you might end up cherry-picking only parts of the >>>>>> >>>>> work >>> >>>> forward. When you're on trunk you usually don't need to worry about >>>>>> >>>>> this >>> >>>> stuff. >>>>>> >>>>>> {begin Theoretical Technical digression for the git-savy} >>>>>> Theoretically we should be able to make a single "phoney" merge commit >>>>>> that re-establishes the mergeability between the 2.2.1 and 3.0.X >>>>>> >>>>> branch >>> >>>> so >>>> >>>>> that any subsequent changes we make to 2.2.1 can merge directly >>>>>> >>>>> downstream. >>>> >>>>> I have not done this in practice but I'm sure some others here have. >>>>>> >>>>> I'm >>> >>>> thinking something like this: >>>>>> git checkout maven3.0.X >>>>>> git merge -s ours origin/maven-2.2.1 >>>>>> >>>>>> Now of course I want to test this out before we proceed >>>>>> {end Theoretical Technical digression for the git-savy} >>>>>> >>>>>> >>>>>> Kristian >>>>>> >>>>>> >>>>>> 2012/10/11 Jason van Zyl <ja...@tesla.io> >>>>>> >>>>>> Say I have the following scenario: >>>>>>> >>>>>>> I'm working 3.1-S and creating some new ITs, and then I work on 2.2.x >>>>>>> and create some ITs. What's the plan with making sure that we have >>>>>>> >>>>>> one >>> >>>> cohesive set of ITs that we can use across all versions? Just merge >>>>>>> additions back into every branch? Because we would need to checkout >>>>>>> >>>>>> two >>> >>>> copies in order to be at one branch for the version of Maven you're >>>>>>> >>>>>> working >>>> >>>>> on and the branch where the ITs are. I understand wanting a >>>>>>> >>>>>> rationalized >>>> >>>>> fork and with unit tests I understand, but did you forks of large OSS >>>>>>> projects include ITs like this? >>>>>>> >>>>>>> If that workflow is sorted out it seems fine. I just don't want it to >>>>>>> >>>>>> be >>>> >>>>> onerous to achieve the discipline of having on coherent set of tests >>>>>>> >>>>>> that >>>> >>>>> work across all versions of Maven. It's pretty easy to make that >>>>>>> >>>>>> consistent >>>> >>>>> right now. There's not a huge number of branches so merging additions >>>>>>> >>>>>> back >>>> >>>>> to each branch is pretty easy. Is that what you had in mind? >>>>>>> >>>>>>> >>>>>>> On Oct 11, 2012, at 4:06 PM, Kristian Rosenvold < >>>>>>> kristian.rosenv...@gmail.com> wrote: >>>>>>> >>>>>>> 2012/10/11 Arnaud Héritier <aherit...@gmail.com> >>>>>>>> >>>>>>>> Now let's say that someone wants to solve a problem on a >>>>>>>>> >>>>>>>> maintenance >>> >>>> branch >>>>>>> >>>>>>>> (thus not master) >>>>>>>>> With git it will checkout this branch to work on the fix, but if >>>>>>>>> >>>>>>>> in >>> >>>> // he >>>>>>> >>>>>>>> wants to add an IT it will add it on this branch (not on master >>>>>>>>> >>>>>>>> where >>>> >>>>> we >>>>>>> >>>>>>>> should have all ITs ?) >>>>>>>>> How many chance that one day we forgot to merge back ITs from all >>>>>>>>> >>>>>>>> branches >>>>>>> >>>>>>>> in master ? >>>>>>>>> >>>>>>>>> >>>>>>>> If you make any kind of change on a branch >>>>>>>> >>>>>>> (bugfix/feature/whatever) >>> >>>> I >>>> >>>>> would >>>>>>>> expect to have test updates being done on that branch too, so the >>>>>>>> >>>>>>> branch >>>>>>> >>>>>>>> represents a complete "diff" of the change; both feature and tests. >>>>>>>> >>>>>>>> When the fix/feature is merged back into master the tests come >>>>>>>> >>>>>>> along, >>> >>>> if >>>>>>> >>>>>>>> the feature is >>>>>>>> never merged to master, the tests stay in their branch - just like >>>>>>>> >>>>>>> they >>>> >>>>> should. >>>>>>>> >>>>>>>> This is a healthy mode of operation; if you look at the branches in >>>>>>>> >>>>>>> my >>>> >>>>> surefire github repo >>>>>>>> (https://github.com/**krosenvold/maven-surefire<https://github.com/krosenvold/maven-surefire>) >>>>>>>> I have like 15 >>>>>>>> >>>>>>> different >>>>>>> >>>>>>>> branches. >>>>>>>> Some of them are specific JIRAs and may contain testcases and >>>>>>>> >>>>>>> partial >>> >>>> fixes. Now I will >>>>>>>> start pushing these to the ASF git repo instead, since they >>>>>>>> >>>>>>> represent >>> >>>> work >>>>>>> >>>>>>>> on an issue >>>>>>>> that is not fully fixed; maybe just a testcase or a test project. >>>>>>>> >>>>>>>> I think it's important we acknowledge the existence/intention of >>>>>>>> >>>>>>> such >>> >>>> branches on >>>>>>>> the corresponding JIRA when we make such feature branches in the >>>>>>>> >>>>>>> official >>>>>>> >>>>>>>> repo. >>>>>>>> If I just push it to my personal github repo it can be as messy as >>>>>>>> >>>>>>> I >>> >>>> prefer, but when >>>>>>>> I push it to ASF I'd prefer it to have reasonably well-defined >>>>>>>> responsibility (like test-case, >>>>>>>> suggested fix or similar) and some value to others. If it's just my >>>>>>>> personal doodles I'll >>>>>>>> keep them in my personal github. >>>>>>>> >>>>>>>> As for branches that never get merged back; well that's life and >>>>>>>> >>>>>>> usually >>>>>>> >>>>>>>> there's a story >>>>>>>> behind that and we tell it in jira. >>>>>>>> >>>>>>>> Kristian >>>>>>>> >>>>>>> >>>>>>> Thanks, >>>>>>> >>>>>>> Jason >>>>>>> >>>>>>> ------------------------------**---------------------------- >>>>>>> Jason van Zyl >>>>>>> Founder & CTO, Sonatype >>>>>>> Founder, Apache Maven >>>>>>> http://twitter.com/jvanzyl >>>>>>> ------------------------------**--------------------------- >>>>>>> >>>>>>> In short, man creates for himself a new religion of a rational >>>>>>> and technical order to justify his work and to be justified in it. >>>>>>> >>>>>>> -- Jacques Ellul, The Technological Society >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >>> >>> -- >>> ----- >>> Arnaud Héritier >>> 06-89-76-64-24 >>> http://aheritier.net >>> Mail/GTalk: aherit...@gmail.com >>> Twitter/Skype : aheritier >>> >>> >> > ------------------------------**------------------------------**--------- > To unsubscribe, e-mail: > dev-unsubscribe@maven.apache.**org<dev-unsubscr...@maven.apache.org> > For additional commands, e-mail: dev-h...@maven.apache.org > >