Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 8DD862007D0 for ; Tue, 10 May 2016 22:11:05 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 8C4FC16098A; Tue, 10 May 2016 20:11:05 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 08A7C160877 for ; Tue, 10 May 2016 22:11:03 +0200 (CEST) Received: (qmail 87409 invoked by uid 500); 10 May 2016 20:11:03 -0000 Mailing-List: contact users-help@subversion.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Delivered-To: mailing list users@subversion.apache.org Received: (qmail 87398 invoked by uid 99); 10 May 2016 20:11:02 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 10 May 2016 20:11:02 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id 67FE4180547 for ; Tue, 10 May 2016 20:11:02 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.999 X-Spam-Level: * X-Spam-Status: No, score=1.999 tagged_above=-999 required=6.31 tests=[HTML_MESSAGE=2, SPF_PASS=-0.001] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id DMdjtq55lhbx for ; Tue, 10 May 2016 20:10:59 +0000 (UTC) Received: from deepth.de (deepth.de [81.169.159.190]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTPS id 5ED985F2C5 for ; Tue, 10 May 2016 20:10:59 +0000 (UTC) Received: from b2b-130-180-18-42.unitymedia.biz ([130.180.18.42] helo=[192.168.3.120]) by deepth.de with esmtpa (Exim 4.72) (envelope-from ) id 1b0DzY-0004Kw-8g for users@subversion.apache.org; Tue, 10 May 2016 22:10:52 +0200 Subject: Re: tag individual files vs whole repo? To: users@subversion.apache.org References: From: Stefan Hett Message-ID: <248bc441-9c6f-8c26-9f5f-1285d649e1f9@egosoft.com> Date: Tue, 10 May 2016 22:10:51 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/alternative; boundary="------------066A33700442D6A0BDD45FE7" archived-at: Tue, 10 May 2016 20:11:05 -0000 This is a multi-part message in MIME format. --------------066A33700442D6A0BDD45FE7 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 5/10/2016 4:09 PM, Matt Garman wrote: > Consider this scenario: our project has concurrent releases, R8 and > R9. These releases have been indicated in the repo by some means, > either a tag or a branch. > Now, we need to bugfix R8 only. Specifically, we want to do a release > R8.1 that does not include R9 features. > > Through some means, e.g. mis-communication, developer error, whatever, > the developer does the bugfix on R9, instead of R8. And he tags his > fix "bug_xyz_fix". Now, the release manager will update his build to > the "bug_xyz_fix" label, and inadvertently release the bugfix plus the > R9 changes, which we wanted to avoid. > > This is one potential problem with tagging a whole repo, rather than > individual files. In this particular case, it may be possible that > the one file that changed for the R8 bugfix is also perfectly valid > for R9. So in this case, it arguably makes sense to tag only the one > changed file, rather than the whole repo. > > I've seen this asked before ("how to tag only individual files"). I > know it's possible to force svn into doing it, but it's going against > the design intent of the tool. And I feel that whole-repo tagging is > generally better, but the above example is one case where that may not > hold. So what I'm really asking is: > - What are the rational reasons to prefer whole-repo tagging > versus individual file tagging? I'm having trouble coming up with > example cases to support whole-repo tagging even though my gut says > it's better. The case you are describing is certainly something where revision/file labels/tags would be beneficial. However, tbh this is a case/situation I never came across yet in my entire time I've been developing software. Certainly the fact that I do not have much experience with Git contributes to that. I take it that the reason for that is that I never thought about tagging just "bugfixes". I've used tags only ever to tag completed versions. Bugfixes for past versions, I've always worked on a separate branch. Aka: - proj/trunk is the latest version we are developing on - proj/branches/1.x is created from trunk when version 1.0 is released - proj/tags/1.0 is created from proj/branches/1.x at the same time Following work goes into proj/trunk - bugfixes are done in proj/branches/1.x. At one point 1.1 is released from proj/branches/1.x and a tag is created (proj/tags/1.1). There are also occasions where we release directly from trunk skipping the creation of proj/branches/xxx. Hence the process is very much like the one the SVN project is using. To simplify our workload we are utilizing CruiseControl and set-up a task there which runs daily and automatically merges any changes from proj/branches/1.x back to trunk. That way we have to fix issues which exist in 1.x only once (in the 1.x branch) rather than twice (1.x + trunk). That said, for us tags are always representing the source-/resource-state of a whole version and never of a separate fixes/change - these things are always done using branches. The release manager works with the branch he explicitly switched to (aka: branches/1.x) and is pulling in other branches which contain fixes, so mistakes as you are describing are almost impossible to happen here in practice. The one big obvious advantage of that process and the point of always tagging a whole repository (or better said: a whole project state) is that everything with that tag is in it's fixed state. There are never combinations of multiple tags, which are likely to occur in cases you would end up if you tag files/revisions. So the code and resource state is straight forward when you tag an entire repository. That's the main advantage I see here, but it's on the other side also the main limiting factor which reduces flexibility of what you can do. To be more precise: If you would use a system/procesdure where you create your own release from a combination of separate tags, you could easily compose any kind of project variation. In practice however this would come to its limit sooner or later where the different tags deviate so much from one another that any kind of attempt to merge the different states would be unfeasible. -- Regards, Stefan Hett --------------066A33700442D6A0BDD45FE7 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: 7bit
On 5/10/2016 4:09 PM, Matt Garman wrote:
Consider this scenario: our project has concurrent releases, R8 and
R9.  These releases have been indicated in the repo by some means,
either a tag or a branch.
Now, we need to bugfix R8 only.  Specifically, we want to do a release
R8.1 that does not include R9 features.

Through some means, e.g. mis-communication, developer error, whatever,
the developer does the bugfix on R9, instead of R8.  And he tags his
fix "bug_xyz_fix".  Now, the release manager will update his build to
the "bug_xyz_fix" label, and inadvertently release the bugfix plus the
R9 changes, which we wanted to avoid.

This is one potential problem with tagging a whole repo, rather than
individual files.  In this particular case, it may be possible that
the one file that changed for the R8 bugfix is also perfectly valid
for R9.  So in this case, it arguably makes sense to tag only the one
changed file, rather than the whole repo.

I've seen this asked before ("how to tag only individual files").  I
know it's possible to force svn into doing it, but it's going against
the design intent of the tool.  And I feel that whole-repo tagging is
generally better, but the above example is one case where that may not
hold.  So what I'm really asking is:
    - What are the rational reasons to prefer whole-repo tagging
versus individual file tagging?  I'm having trouble coming up with
example cases to support whole-repo tagging even though my gut says
it's better.
The case you are describing is certainly something where revision/file labels/tags would be beneficial.
However, tbh this is a case/situation I never came across yet in my entire time I've been developing software. Certainly the fact that I do not have much experience with Git contributes to that.

I take it that the reason for that is that I never thought about tagging just "bugfixes". I've used tags only ever to tag completed versions. Bugfixes for past versions, I've always worked on a separate branch. Aka:
- proj/trunk is the latest version we are developing on
- proj/branches/1.x is created from trunk when version 1.0 is released
- proj/tags/1.0 is created from proj/branches/1.x at the same time

Following work goes into proj/trunk - bugfixes are done in proj/branches/1.x.
At one point 1.1 is released from proj/branches/1.x and a tag is created (proj/tags/1.1).

There are also occasions where we release directly from trunk skipping the creation of proj/branches/xxx.

Hence the process is very much like the one the SVN project is using.

To simplify our workload we are utilizing CruiseControl and set-up a task there which runs daily and automatically merges any changes from proj/branches/1.x back to trunk. That way we have to fix issues which exist in 1.x only once (in the 1.x branch) rather than twice (1.x + trunk).

That said, for us tags are always representing the source-/resource-state of a whole version and never of a separate fixes/change - these things are always done using branches. The release manager works with the branch he explicitly switched to (aka: branches/1.x) and is pulling in other branches which contain fixes, so mistakes as you are describing are almost impossible to happen here in practice.

The one big obvious advantage of that process and the point of always tagging a whole repository (or better said: a whole project state) is that everything with that tag is in it's fixed state. There are never combinations of multiple tags, which are likely to occur in cases you would end up if you tag files/revisions. So the code and resource state is straight forward when you tag an entire repository. That's the main advantage I see here, but it's on the other side also the main limiting factor which reduces flexibility of what you can do.

To be more precise: If you would use a system/procesdure where you create your own release from a combination of separate tags, you could easily compose any kind of project variation. In practice however this would come to its limit sooner or later where the different tags deviate so much from one another that any kind of attempt to merge the different states would be unfeasible.
-- 
Regards,
Stefan Hett
--------------066A33700442D6A0BDD45FE7--