Bug 433915

Summary: Review Request: unison213 - File synchronization tool (compatibility package)
Product: [Fedora] Fedora Reporter: Stephen Warren <swarren>
Component: Package ReviewAssignee: Kevin Fenzi <kevin>
Status: CLOSED CURRENTRELEASE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: medium    
Version: rawhideCC: amcnabb, drees76, fedora-package-review, gemi, notting, rjones
Target Milestone: ---Flags: kevin: fedora-review+
kevin: fedora-cvs+
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: unison213-2.13.16-9.fc8.2 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2008-04-17 05:29:12 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Stephen Warren 2008-02-22 03:38:26 UTC
Note: The creation of this package was triggered by bug 433742, and subsequent mailing list discussion. I'll be asking the existing unison package maintainer to review it if possible.

Spec URL: http://avon.wwwdotorg.org/downloads/unison2.13/unison2.13.spec
SRPM URL: http://avon.wwwdotorg.org/downloads/unison2.13/unison2.13-2.13.16-4.fc8.src.rpm
Description:
Unison is a file-synchronization tool. It allows two replicas of a
collection of files and directories to be stored on different hosts
(or different locations on the same host), modified separately, and
then brought up to date by propagating the changes in each replica
to the other.

This package is a compatibility release, for those users who need
to interoperate with systems having a specific version of Unison
installed. Users without this requirement should use the regular
"unison" package, which will always contain the most up-to-date
stable version.

Comment 1 Kevin Kofler 2008-02-22 04:35:38 UTC
*** Bug 433742 has been marked as a duplicate of this bug. ***

Comment 2 Gérard Milmeister 2008-02-22 10:18:23 UTC
Renaming the binary is probably a bad idea, in the case that this package
installed on the server side, as the client will try to call "unison"
on the server.

Comment 3 Stephen Warren 2008-02-22 17:32:11 UTC
Renaming the binary is required so that the unison and unison2.13 packages can
co-exist on the same machine.

On other systems that support parallel installation of multiple versions of
Unison (e.g. Cygwin, and I have to assume Debian/Ubuntu too), this is the way it
works, so it's not remotely unexpected to users of Unison.

Similarly, Unison itself supports the "addversiono" option that'll attempt to
invoke e.g. unison-2.13 on the server instead of plain unison. In this package,
the binary is renamed to match what Unison will attempt to invoke (when using
this option.)


Comment 4 Andrew McNabb 2008-02-22 19:32:54 UTC
In my opinion, this whole thing has been approached from the wrong perspective.
 When Fedora 8 was released, the Unison package was version 2.13.  Until Fedora
9 is released, Unison 2.13 should still be the default version.  The additional
package should be unison2.27.

People expect things to break when they upgrade from Fedora 8 to Fedora 9, but
they don't expect things to randomly break when they check for updates to Fedora 8.

By the way, if people wanted 2.27 so badly, why couldn't they just do
--enablerepo=development?

Comment 5 Stephen Warren 2008-02-22 20:20:58 UTC
Andrew,

Yes, I totally agree. However, it doesn't seem like discussion on Fedora-devel
was moving in the direction of making plain old "unison" continue to be 2.13,
hence I'm trying to get 2.13 back into F8 ASAP.

FYI, my long term goals would be a situation as follows:

For *all* versions of Unison, there will be a "versioned" package unison2.13,
unison2.27 etc.

There will also be an "unversioned" or "meta" package representing the moving
latest version.

This main unison package could contain nothing but the following symlink that
moves based on latest version:

/usr/bin/unison -> /usr/bin/unison-${version}

and a Requires ensuring that the relevant "versioned" package is installed.

This allows all of:

* People can ensure a specific version is installed by installing the versioned
package, with no special cases for whatever the latest version is (since there
will be a versioned package for the latest version too)

* People only interested in interoperability with other Fedora installations at
the same release level can simply install "unison" and have it upgrade whenever
(this still allows us to implement whatever policy we want regarding when to
point this "meta"-package at new versions.)

* People can have N different specific versions installed too, for
interoperability with multiple other systems.

The only issue I see is that if somebody installs plain "unison", and this gets
upgraded, then the old "versioned" package will get left behind. Perhaps the
main unversioned package should just have a copy of the latest app, and not be a
symlink/requires; that would solve this at the potential expense of having two
copies of the latest if explicit versioned packages are installed.

Perhaps if there's further discussion of the above, we should do it on the
mailing list, so the bug doesn't get full up and distract from review?


Comment 6 Stephen Warren 2008-02-22 20:36:25 UTC
On second thoughts, I think we should have:
unison2.13
unison2.27
and use the alternatives system to switch the /usr/bin/unison link.



Comment 7 Stephen Warren 2008-02-23 09:42:17 UTC
How about this, alternatives, upgrade path, and all:

Spec URL: http://avon.wwwdotorg.org/downloads/unison2.13/unison2.13.spec
SRPM URL:
http://avon.wwwdotorg.org/downloads/unison2.13/unison2.13-2.13.16-5.fc8.src.rpm

Spec URL: http://avon.wwwdotorg.org/downloads/unison2.27/unison2.27.spec
SRPM URL:
http://avon.wwwdotorg.org/downloads/unison2.27/unison2.27-2.27.57-3.fc8.src.rpm

Description:
Unison is a multi-master file-synchronization tool. It allows two
replicas of a collection of files and directories to be stored on
different hosts (or different locations on the same host), modified
separately, and then brought up to date by propagating the changes
in each replica to the other.

Note that this package contains Unison version %{ver_maj}, and
will never be upgraded to a different major version. Other packages
exist if you require a different major version.


Comment 8 Andrew McNabb 2008-02-23 20:42:51 UTC
Stephen, I like this approach much better.  Thanks.

Comment 9 Stephen Warren 2008-02-24 17:33:08 UTC
Clearing fedora-review=?. I misremembered, and thought that was the "request
review" value. Also, I was hoping Gerard would review this, but he hasn't, yet
at least.

Comment 10 Stephen Warren 2008-03-02 00:57:09 UTC
Minor updates to fulfill Fedora's provides/obsoletes policy re: package
renaming. Also, the unison2.27 package is now split out into a separate review
request.

Spec URL: http://avon.wwwdotorg.org/downloads/unison2.13/unison2.13.spec
SRPM URL:
http://avon.wwwdotorg.org/downloads/unison2.13/unison2.13-2.13.16-7.fc8.src.rpm

Description:
Unison is a multi-master file-synchronization tool. It allows two
replicas of a collection of files and directories to be stored on
different hosts (or different locations on the same host), modified
separately, and then brought up to date by propagating the changes
in each replica to the other.

Note that this package contains Unison version %{ver_maj}, and
will never be upgraded to a different major version. Other packages
exist if you require a different major version.

Notes:
Please see bug 433742 for background on why this package was created.
Please see bug 435578 for a review request for package unison2.27

There's one rpmlint warning, which is expected; the unison2.27 package provides
plain "unison", so that users who just say "unison" get the latest version.


Comment 11 Stephen Warren 2008-03-13 15:53:25 UTC
Just in case anybody is holding off reviewing this because they aren't sure
whether replacing the existing unison package is A Good Thing, the existing
maintainer said this:

Sorry for taking so long, but currently I have other problems to deal
with. You can take over maintainership of the unison packages if you
want. I can also co-maintain the packages, but I don't know when I have
the time to review them. I presume you have made some changes concerning
alternatives?


Comment 12 Kevin Fenzi 2008-03-15 17:26:02 UTC
ok, since no one else is wanting to review, I will give it a shot. ;) 

Look for a full review here in a few. 

Comment 13 Kevin Fenzi 2008-03-15 17:30:04 UTC
Humm. Before I do a full review here... shouldn't this package be named: 

unison213 ?

See:
http://fedoraproject.org/wiki/Packaging/NamingGuidelines#head-48ca801d3f8b9f46713343760949349fba78e644

"Note that we do not use delimiters in the name in this situation, we remove the
period '.' from the version number and attach it to the name."

Comment 14 Stephen Warren 2008-03-15 18:16:55 UTC
Re: naming unison213. Yes, those rules do apply.

That's unfortunate, since it makes the package name less meaningful to me, and
inconsistent with other distros. Hopefully there won't be a version 21.3,
because then the package names will collide. 

But, since these are the rules, I'll rename the package. 

It also states that there should be a package names plain "unison" instead of
"unison227". I'm not convinced I like that idea, since that package will
continually get upgraded with incompatible versions, which is what triggered
adding the new packages in the first place. Would an exception be OK for the
"latest" package name due to the way upstream works?


Comment 15 Gérard Milmeister 2008-03-15 19:12:52 UTC
Alternatively, one could create a compat-unison-2.13 package.

Comment 16 Stephen Warren 2008-03-15 21:01:05 UTC
The reason I don't like having:

unison2.13 and unison

as opposed to:

unison2.13 and unison2.27

is that in the former case, if unison switches from packageing 2.27 to a
hypothetical 2.28 that's not compatible, we'll have to create
(compat-)unison2.27, and users will have to manually install that. If they get a
"versioned" package from the get-go in all cases, then they won't have to do this.


Comment 17 Kevin Fenzi 2008-03-15 22:12:09 UTC
Yeah, I agree with Stephen's rationale in comment #16 overall. 

The remaining question in my mind is: Should there be any kind of Provides for
"unison" so users who don't care about versions can simply install it. 
That would introduce some annoying corner cases however:

1. Current installs that have 'unison' installed. 

I would guess we would make the newest version in each dist
"Provides: unison = %{version}-%{release}"
This would upgrade current installs to the newest version for that dist. 

2. Dist upgrades (ie, from f8 to f9 or f9 to f10)

The above would mean that if you had the newest unison package installed, 
you could be upgraded to an incompatible version on dist upgrade. 
Of course users could then simply install the 'unisonXYZ' to maintain
compatibility. 

That all could be too much trouble however. Might be better to just have users
install the exact unison package they want specifically. Thoughts? 
Or a more clever way to handle things?

Anyhow, Stephen: Can you spin up a new 'unison213' package? 

Comment 18 Stephen Warren 2008-03-16 06:35:14 UTC
Kevin Fenzi wrote:
> 1. Current installs that have 'unison' installed. 
> 
> I would guess we would make the newest version in each dist
> "Provides: unison = %{version}-%{release}"
> This would upgrade current installs to the newest version for that dist. 

Yes, that's already in the specs. The new packages obsolete the existing
"unversioned" unison package in order to get it off the system so that the
alternatives links set up by the new packages will work.

> 2. Dist upgrades (ie, from f8 to f9 or f9 to f10)
> 
> The above would mean that if you had the newest unison package installed, 
> you could be upgraded to an incompatible version on dist upgrade. 
> Of course users could then simply install the 'unisonXYZ' to maintain
> compatibility.

Really? If I "yum install unison", I'll get "unison227-XXX" with these new
packages. Given this, won't unison227 be the thing yum looks for on
update/upgrade, and hence will stay installed. Does a package that provides
something really get removed and replaced with a different package just because
something different provides that?

New spec/SRPM coming up soon, once mock has finished updating my build root.
Sorry to take so long - had company visiting and a needy baby...

Comment 20 Stephen Warren 2008-03-16 18:46:51 UTC
Note to self: Remember to file a bug re: ExcludeArch: PPC64 (see
FE-ExcludeArch-ppc64, bug 238953) because the ocaml native compiler isn't
available on PPC64.


Comment 21 Kevin Fenzi 2008-03-17 02:36:16 UTC
>Really? If I "yum install unison", I'll get "unison227-XXX" with these new
>packages. Given this, won't unison227 be the thing yum looks for on
>update/upgrade, and hence will stay installed. Does a package that provides
>something really get removed and replaced with a different package just because
>something different provides that?

No, it shouldn't unless there are Obsoletes... 

>Note to self: Remember to file a bug re: ExcludeArch: PPC64 (see
>FE-ExcludeArch-ppc64, FE-ExcludeArch-ppc64) because the ocaml native compiler
>isn't available on PPC64.

It should be as of the last few weeks... so no need for that. ;) 

Look for a review here in a bit. 


Comment 22 Kevin Fenzi 2008-03-17 03:19:05 UTC
OK - Package meets naming and packaging guidelines
OK - Spec file matches base package name.
OK - Spec has consistant macro usage.
OK - Meets Packaging Guidelines.
OK - License (GPL+)
See below - License field in spec matches
OK - License file included in package
OK - Spec in American English
OK - Spec is legible.
OK - Sources match upstream md5sum:
a79bf5f4ebf2a1eaf15b1ac97f827374  unison-2.13.16.tar.gz
a79bf5f4ebf2a1eaf15b1ac97f827374  unison-2.13.16.tar.gz.orig
See below - Package needs ExcludeArch
OK - BuildRequires correct
OK - Package has %defattr and permissions on files is good.
OK - Package has a correct %clean section.
OK - Package has correct buildroot
OK - Package is code or permissible content.
OK - Packages %doc files don't affect runtime.
OK - Package has rm -rf RPM_BUILD_ROOT at top of %install

OK - Package is a GUI app and has a .desktop file

OK - Package compiles and builds on at least one arch.
OK - Package has no duplicate files in %files.
OK - Package doesn't own any directories other packages own.
OK - Package owns all the directories it creates.
See below - No rpmlint output.
See below - final provides and requires are sane.

SHOULD Items:

OK - Should build in mock.
OK - Should build on all supported archs
OK - Should have dist tag

Issues:

1. Seems like all the source files here just say:
 Copyright 1999-2004 (see COPYING for details)
COPYING is just a copy of the GPL, so this would make the
project "GPL+" (ie, any version of the GPL).
Perhaps you can clarify with upstream what they intend here?

2. ocaml should now be available on ppc64, so you shouldn't need
to exclude that anymore. I did a scratch build here and it built fine on
ppc64:
http://koji.fedoraproject.org/koji/taskinfo?taskID=518984

3. rpmlint says:

unison213.x86_64: W: obsolete-not-provided unison

This can be ignored as this is the compat/lower version for the release.


Comment 23 Stephen Warren 2008-03-17 04:50:23 UTC
> 1. Seems like all the source files here just say:
> ... license ...
> Perhaps you can clarify with upstream what they intend here?

Sure; I'll fire of an email...

> 2. ocaml should now be available on ppc64, so you shouldn't need...

Cool! Gerard added the Exclude when unison got rebuilt a month or so ago. I
guess he was unlucky and just missed it being available! I'll fix this once I
hear back on the license to batch up any required spec changes.

Thanks *very* much for the review.


Comment 24 Stephen Warren 2008-03-17 04:59:54 UTC
Re: The license. Isn't COPYING GPLv2, not just GPL? Also, COPYING states that if
the source file states "or later", then you have that option, then otherwise
not. Hence, why I chose GPLv2, not GPLv2+.

Anyway, I'm in the process of confirming with upstream what they actually did
intend.


Comment 25 Stephen Warren 2008-03-17 05:25:37 UTC
Note to self: OCAML is only available on ppc64 in devel/F-9, not F-8/F-7.


Comment 26 Stephen Warren 2008-03-17 23:24:30 UTC
Upstream says this:

Well, the true answer is that we wanted an open-source license for all  
the usual reasons, chose GPLv2 because it was standard at the time,  
and then forgot about it.  :-)

I agree that the current state of affairs looks like "v2 and not  
later," strictly speaking.  If this is preventing anyone from using or  
improving Unison, though, I'd be willing to consider changing.

To avoid turning the Unison list into a GPL discussion forum, could  
people please communicate their opinions about this to me off-list?

Thanks,

     - Benjamin


Comment 27 Kevin Fenzi 2008-03-17 23:41:33 UTC
Well, because the GPL (all versions) includes: 

"If the Program does not specify a version number of this License, you may
choose any version ever published by the Free Software
Foundation."

The correct license tag here is "GPL+", ie, ANY version of the GPL, not just
GPLv2. So, GPLv1, GPLv2, GPLv3, or any other version that exists or may exist. 

Comment 28 Stephen Warren 2008-03-19 22:47:49 UTC
Upstream has acknowledged GPL+ and is OK with it. I'll respin a new SRPM with
this and the ExcludeArch fix hopefully tonight, depending on headache...


Comment 30 Kevin Fenzi 2008-03-20 03:01:03 UTC
Excellent. I see no further blockers here, so this package is APPROVED. 

Might I suggest that you wait until the unison227 package is approved before
importing this one? At the same time you will need to follow the end of life
procedure on the plain 'unison' package and drop it out of things. 

I will try and review the unison227 package soon, unless someone beats me to it. 

Comment 31 Stephen Warren 2008-03-20 04:43:10 UTC
> Might I suggest that you wait until the unison227 package is approved before
> importing this one? At the same time you will need to follow the end of life
> procedure on the plain 'unison' package and drop it out of things.

Absolutely. I assume I don't start any of the EOL steps until after the new
packages have been signed and pushed to updates via bodhi?


Comment 32 Kevin Fenzi 2008-03-20 19:56:00 UTC
Correct. Make sure things are pushed before the old package is end of lifed. 

Comment 33 Stephen Warren 2008-03-22 23:57:34 UTC
New Package CVS Request
=======================
Package Name: unison213
Short Description:  Multi-master File synchronization tool
Owners: swarren,gemi
Branches: F-7 F-8 devel EL-4 EL-5
Cvsextras Commits: yes


Comment 34 Kevin Fenzi 2008-03-23 01:06:15 UTC
cvs done. 

I would suggest pushing this package and the other unison one into rawhide and
letting them be there a few days before pushing the other branches, just to make
sure everything works as expected. 

Comment 35 Stephen Warren 2008-04-17 05:29:12 UTC
This package is now in F7 stable, F8 stable, and devel, hence closing out this bug.