Merge lp:~ahasenack/landscape-client/17.03-backports-fix into lp:~landscape/landscape-client/17.03

Proposed by Andreas Hasenack
Status: Merged
Approved by: Andreas Hasenack
Approved revision: 944
Merged at revision: 941
Proposed branch: lp:~ahasenack/landscape-client/17.03-backports-fix
Merge into: lp:~landscape/landscape-client/17.03
Diff against target: 178 lines (+115/-11)
3 files modified
debian/changelog (+8/-11)
landscape/package/reporter.py (+19/-0)
landscape/package/tests/test_reporter.py (+88/-0)
To merge this branch: bzr merge lp:~ahasenack/landscape-client/17.03-backports-fix
Reviewer Review Type Date Requested Status
🤖 Landscape Builder test results Approve
Adam Collard (community) Approve
Alberto Donato (community) Approve
Review via email: mp+321115@code.launchpad.net

Commit message

Backport fix for #1668583 (don't report backport packages) from trunk r962.

Description of the change

Backport fix for #1668583 (don't report backport packages) from trunk r962.

We want 17.03 client builds to populate ppa:landscape/landscape-cloud-installer and lds-proposed.

The current LP recipe for builds out of this 17.03 branch is:

# bzr-builder format 0.3 deb-version {debupstream}-0~{revno}
lp:~landscape/landscape-client/17.03

This means that with a plain "17.03" in debian/changelog, we would get a package like this:

17.03-0~941

Which could make one think this is trunk r941 if you just look at that version without the context of which branch it was built from.

Therefore, I also changed the "debupstream" version of the package in debian/changelog so it's clear this is still client r940 from trunk *plus* the r962 fix.

In the end, the recipe will give us a build with a version like this:

17.03~bzr940-0~941

It's still not super clear where this build came from, though. We could use "17.03~release71-0~941" instead perhaps, except there is no release-71 branch for the client.

To post a comment you must log in.
Revision history for this message
Alberto Donato (ack) wrote :

+1

review: Approve
Revision history for this message
Adam Collard (adam-collard) :
review: Approve
Revision history for this message
🤖 Landscape Builder (landscape-builder) wrote :

The attempt to merge lp:~ahasenack/landscape-client/17.03-backports-fix into lp:~landscape/landscape-client/17.03 failed. Below is the output from the failed tests.

make: *** No rule to make target 'ci-check'. Stop.

Revision history for this message
🤖 Landscape Builder (landscape-builder) wrote :

No approved revision specified.

Revision history for this message
🤖 Landscape Builder (landscape-builder) :
review: Abstain (executing tests)
Revision history for this message
🤖 Landscape Builder (landscape-builder) wrote :

Command: TRIAL_ARGS=-j4 make ci-check
Result: Fail
Revno: 944
Branch: lp:~ahasenack/landscape-client/17.03-backports-fix
Jenkins: https://ci.lscape.net/job/latch-test-xenial/3790/

review: Needs Fixing (test results)
Revision history for this message
🤖 Landscape Builder (landscape-builder) :
review: Abstain (executing tests)
Revision history for this message
🤖 Landscape Builder (landscape-builder) wrote :

Command: TRIAL_ARGS=-j4 make check
Result: Success
Revno: 944
Branch: lp:~ahasenack/landscape-client/17.03-backports-fix
Jenkins: https://ci.lscape.net/job/latch-test-xenial/3791/

review: Approve (test results)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'debian/changelog'
--- debian/changelog 2017-03-02 09:59:16 +0000
+++ debian/changelog 2017-03-27 20:35:37 +0000
@@ -1,14 +1,11 @@
1landscape-client (17.02-0ubuntu1) UNRELEASED; urgency=medium1landscape-client (17.03~bzr940-0ubuntu1) UNRELEASED; urgency=medium
22
3 * Bump version3 * Client 17.03~bzr940: branched off trunk r940
44 * Don't report packages that are coming from backports, so that Landscape
5 -- Alberto Donato <alberto.donato@canonical.com> Thu, 02 Mar 2017 10:51:32 +01005 doesn't try to upgrade to versions of packages that are in backports.
66 Backported from trunk's r962. (LP: #1668583)
7landscape-client (17.01-0ubuntu1) UNRELEASED; urgency=medium7
88 -- Andreas Hasenack <andreas@canonical.com> Mon, 27 Mar 2017 17:17:10 -0300
9 * New trunk build
10
11 -- Andreas Hasenack <andreas@canonical.com> Fri, 05 Aug 2016 10:29:28 -0300
129
13landscape-client (16.03-0ubuntu1) xenial; urgency=medium10landscape-client (16.03-0ubuntu1) xenial; urgency=medium
1411
1512
=== modified file 'landscape/package/reporter.py'
--- landscape/package/reporter.py 2016-08-04 16:13:11 +0000
+++ landscape/package/reporter.py 2017-03-27 20:35:37 +0000
@@ -13,6 +13,7 @@
13from landscape.lib.twisted_util import gather_results, spawn_process13from landscape.lib.twisted_util import gather_results, spawn_process
14from landscape.lib.fetch import fetch_async14from landscape.lib.fetch import fetch_async
15from landscape.lib.fs import touch_file15from landscape.lib.fs import touch_file
16from landscape.lib.lsb_release import parse_lsb_release, LSB_RELEASE_FILENAME
16from landscape.lib import bpickle17from landscape.lib import bpickle
1718
18from landscape.package.taskhandler import (19from landscape.package.taskhandler import (
@@ -546,8 +547,26 @@
546 current_available = set()547 current_available = set()
547 current_upgrades = set()548 current_upgrades = set()
548 current_locked = set()549 current_locked = set()
550 lsb = parse_lsb_release(LSB_RELEASE_FILENAME)
551 backports_archive = "{}-backports".format(lsb["code-name"])
549552
550 for package in self._facade.get_packages():553 for package in self._facade.get_packages():
554 # Don't include package versions from the official backports
555 # archive. The backports archive is enabled by default since
556 # xenial with a pinning policy of 100. Ideally we would
557 # support pinning, but we don't yet. In the mean time, we
558 # ignore backports, so that packages don't get automatically
559 # upgraded to the backports version.
560 backport_origins = [
561 origin for origin in package.origins
562 if origin.archive == backports_archive]
563 if backport_origins and (
564 len(backport_origins) == len(package.origins)):
565 # Ignore the version if it's only in the official
566 # backports archive. If it's somewhere else as well,
567 # e.g. a PPA, we assume it was added manually and the
568 # user wants to get updates from it.
569 continue
551 hash = self._facade.get_package_hash(package)570 hash = self._facade.get_package_hash(package)
552 id = self._store.get_hash_id(hash)571 id = self._store.get_hash_id(hash)
553 if id is not None:572 if id is not None:
554573
=== modified file 'landscape/package/tests/test_reporter.py'
--- landscape/package/tests/test_reporter.py 2016-08-04 16:13:11 +0000
+++ landscape/package/tests/test_reporter.py 2017-03-27 20:35:37 +0000
@@ -3,6 +3,7 @@
3import time3import time
4import apt_pkg4import apt_pkg
5import mock5import mock
6import shutil
67
7from twisted.internet.defer import Deferred, succeed, fail, inlineCallbacks8from twisted.internet.defer import Deferred, succeed, fail, inlineCallbacks
8from twisted.internet import reactor9from twisted.internet import reactor
@@ -10,6 +11,7 @@
1011
11from landscape.lib.fs import create_file, touch_file12from landscape.lib.fs import create_file, touch_file
12from landscape.lib.fetch import FetchError13from landscape.lib.fetch import FetchError
14from landscape.lib.lsb_release import parse_lsb_release, LSB_RELEASE_FILENAME
13from landscape.lib import bpickle15from landscape.lib import bpickle
14from landscape.package.store import (16from landscape.package.store import (
15 PackageStore, UnknownHashIDRequest, FakePackageStore)17 PackageStore, UnknownHashIDRequest, FakePackageStore)
@@ -923,6 +925,92 @@
923 result = self.reporter.detect_packages_changes()925 result = self.reporter.detect_packages_changes()
924 return result.addCallback(got_result)926 return result.addCallback(got_result)
925927
928 def test_detect_packages_changes_with_backports(self):
929 """
930 Package versions coming from backports aren't considered to be
931 available.
932
933 This is because we don't support pinning, and the backports
934 archive is enabled by default since xenial.
935 """
936 message_store = self.broker_service.message_store
937 message_store.set_accepted_types(["packages"])
938
939 lsb = parse_lsb_release(LSB_RELEASE_FILENAME)
940 release_path = os.path.join(self.repository_dir, "Release")
941 with open(release_path, "w") as release:
942 release.write("Suite: {}-backports".format(lsb["code-name"]))
943
944 self.store.set_hash_ids({HASH1: 1, HASH2: 2, HASH3: 3})
945
946 def got_result(result):
947 self.assertMessages(message_store.get_pending_messages(), [])
948
949 self.assertEqual(sorted(self.store.get_available()), [])
950
951 result = self.reporter.detect_packages_changes()
952 return result.addCallback(got_result)
953
954 def test_detect_packages_changes_with_backports_others(self):
955 """
956 Packages coming from backport archives that aren't named like
957 the official backports archive are considered to be available.
958 """
959 message_store = self.broker_service.message_store
960 message_store.set_accepted_types(["packages"])
961
962 release_path = os.path.join(self.repository_dir, "Release")
963 with open(release_path, "w") as release:
964 release.write("Suite: my-personal-backports")
965
966 self.store.set_hash_ids({HASH1: 1, HASH2: 2, HASH3: 3})
967
968 def got_result(result):
969 self.assertMessages(message_store.get_pending_messages(),
970 [{"type": "packages", "available": [(1, 3)]}])
971
972 self.assertEqual(sorted(self.store.get_available()), [1, 2, 3])
973
974 result = self.reporter.detect_packages_changes()
975 return result.addCallback(got_result)
976
977 def test_detect_packages_changes_with_backports_both(self):
978 """
979 If a package is both in the official backports archive and in
980 some other archive (e.g. a PPA), the package is considered to be
981 available.
982
983 The reason for this is that if you have enabled a PPA, you most
984 likely want to get updates from it.
985 """
986 message_store = self.broker_service.message_store
987 message_store.set_accepted_types(["packages"])
988
989 temp_dir = self.makeDir()
990 other_backport_dir = os.path.join(temp_dir, "my-personal-backports")
991 shutil.copytree(self.repository_dir, other_backport_dir)
992 os.remove(os.path.join(other_backport_dir, "Packages"))
993 self.facade.add_channel_deb_dir(other_backport_dir)
994
995 lsb = parse_lsb_release(LSB_RELEASE_FILENAME)
996 official_release_path = os.path.join(self.repository_dir, "Release")
997 with open(official_release_path, "w") as release:
998 release.write("Suite: {}-backports".format(lsb["code-name"]))
999 unofficial_release_path = os.path.join(other_backport_dir, "Release")
1000 with open(unofficial_release_path, "w") as release:
1001 release.write("Suite: my-personal-backports")
1002
1003 self.store.set_hash_ids({HASH1: 1, HASH2: 2, HASH3: 3})
1004
1005 def got_result(result):
1006 self.assertMessages(message_store.get_pending_messages(),
1007 [{"type": "packages", "available": [(1, 3)]}])
1008
1009 self.assertEqual(sorted(self.store.get_available()), [1, 2, 3])
1010
1011 result = self.reporter.detect_packages_changes()
1012 return result.addCallback(got_result)
1013
926 @inlineCallbacks1014 @inlineCallbacks
927 def test_detect_packages_after_tasks(self):1015 def test_detect_packages_after_tasks(self):
928 """1016 """

Subscribers

People subscribed via source and target branches

to all changes: