Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also .

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also .
Choose a Base Repository
snapcore/snapcraft
kalikiana/snapcraft
3v1n0/snapcraft
AdrianRubio/snapcraft
AlexandreAbreu/snapcraft
CNXTEoEorg/snapcraft
CSRedRat/snapcraft
CavanJ/snapcraft
ChrisMacNaughton/snapcraft
Conan-Kudo/snapcraft
EduardoVega/snapcraft
Eroui/snapcraft
Fohlen/snapcraft
General-Beck/snapcraft
JamesLinus/snapcraft
JuanJ67m/snapcraft
Laserbear/snapcraft
LefterisJP/snapcraft
Lingaprahasam/snapcraft
M0ses/snapcraft
Magical-Chicken/snapcraft
MaxLeiter/snapcraft
Mega-Tr0n/snapcraft
MonJamp/snapcraft
OddBloke/snapcraft
OpnSrcConstruction/snapcraft
RAOF/snapcraft
Roadmaster/snapcraft
RobLoach/snapcraft
SamYaple/snapcraft
SamuelWeiss/snapcraft
Saviq/snapcraft
StetHD/snapcraft
ZenHarbinger/snapcraft
albertodonato/snapcraft
aleixpol/snapcraft
alexcrichton/snapcraft
alextnewman/snapcraft
andyli/snapcraft
ankurjain41282/snapcraft
annesteenbeek/snapcraft
apachelogger/snapcraft
asac/snapcraft
attente/snapcraft
barkinet/snapcraft
battlemidget/snapcraft
bjornt/snapcraft
blakerouse/snapcraft
blimjoe/snapcraft
bloodearnest/snapcraft
bobolopolis/snapcraft
bogdanap/snapcraft
boghison/snapcraft
btenaglia/snapcraft
bzoltan1/snapcraft
caio1982/snapcraft
caldav/snapcraft
chadmiller/snapcraft
chenhan1218/snapcraft
chihchun/snapcraft
chipaca/snapcraft
cholcombe973/snapcraft
chrisglass/snapcraft
cjwatson/snapcraft
clobrano/snapcraft
codeofdusk/snapcraft
cpaelzer/snapcraft
cprov/snapcraft
cratliff/snapcraft
croepha/snapcraft
cwayne18/snapcraft
danklut/snapcraft
dholbach/snapcraft
diddledan/snapcraft
didrocks/snapcraft
dplanella/snapcraft
dpniel/snapcraft
dustinkirkland/snapcraft
earnubs/snapcraft
ehbello/snapcraft
elopio/snapcraft
evandandrea/snapcraft
facundobatista/snapcraft
fallen/snapcraft
fazerlicourice7/snapcraft
felicianotech/snapcraft
fgallina/snapcraft
fgimenez/snapcraft
filibtester/snapcraft
flexiondotorg/snapcraft
fmanea/snapcraft
fnordahl/snapcraft
franciscocpg/snapcraft
frankban/snapcraft
gnuoy/snapcraft
gsilvapt/snapcraft
gunawanw9/snapcraft
gxx9203/snapcraft
hasansaikat/snapcraft
jamiedbennett/snapcraft
javacruft/snapcraft
jaymell/snapcraft
jdxcode/snapcraft
jhobbs/snapcraft
jocave/snapcraft
joedborg/snapcraft
jonathon-love/snapcraft
jorgher/snapcraft
josepht/snapcraft
justincan/snapcraft
kissiel/snapcraft
kspviswa/snapcraft
kustomzone/snapcraft
kyrofa/snapcraft
larryprice/snapcraft
leecow/snapcraft
liu-xiao-guo/snapcraft
lool/snapcraft
m-shibata/snapcraft
malept/snapcraft
mariogrip/snapcraft
markshuttle/snapcraft
maxiberta/snapcraft
mbruzek/snapcraft
mhall119/snapcraft
mikemccracken/snapcraft
morphis/snapcraft
mrjogo/snapcraft
msis/snapcraft
mtau87/snapcraft
mvayngrib/snapcraft
mvo5/snapcraft
mwhudson/snapcraft
nathanhaines/snapcraft
naufraghi/snapcraft
nefelim/snapcraft
nhandler/snapcraft
nottrobin/snapcraft
nvcexploder/snapcraft
oSoMoN/snapcraft
ops-snappy/snapcraft
pachulo/snapcraft
pedrococa/snapcraft
piso77/snapcraft
plars/snapcraft
pombredanne/snapcraft
psivaa/snapcraft
q0wOp/snapcraft
rafaelcaricio/snapcraft
ralsina/snapcraft
rbreitenmoser/snapcraft
ricardokirkner/snapcraft
rmescandon/snapcraft
robert-ancell/snapcraft
robgev/snapcraft
robotlinker/snapcraft
rowhit/snapcraft
roxyd/snapcraft
sdeancos/snapcraft
seawaywen/snapcraft
seb128/snapcraft
sergiusens/snapcraft
shawn111/snapcraft
simon-jentzsch/snapcraft
sjpan/snapcraft
smith-i/snapcraft
smoser/snapcraft
snapcore-io-st/snapcraft
snappy-m-o/snapcraft
sparkiegeek/snapcraft
squidsoup/snapcraft
ssweeny/snapcraft
stephenbhope/snapcraft
stevenwilkin/snapcraft
stgraber/snapcraft
strukturag/snapcraft
stub42/snapcraft
surajwarrier05/snapcraft
tachyons/snapcraft
tasdomas/snapcraft
techraf/snapcraft
ted-gould/snapcraft
teknoraver/snapcraft
thomir/snapcraft
tim-sueberkrueb/snapcraft
timchen119/snapcraft
timjp87/snapcraft
torusJKL/snapcraft
tsdgeos/snapcraft
tsimonq2/snapcraft
tuksik/snapcraft
untriangle/snapcraft
vilagithub/snapcraft
vilvo/snapcraft
walimis/snapcraft
williamcrowe/snapcraft
yphus/snapcraft
yu-yang-halo/snapcraft
zhangtuoparis13/snapcraft
zyga/snapcraft
Nothing to show
...
Choose a Head Repository
snapcore/snapcraft
kalikiana/snapcraft
3v1n0/snapcraft
AdrianRubio/snapcraft
AlexandreAbreu/snapcraft
CNXTEoEorg/snapcraft
CSRedRat/snapcraft
CavanJ/snapcraft
ChrisMacNaughton/snapcraft
Conan-Kudo/snapcraft
EduardoVega/snapcraft
Eroui/snapcraft
Fohlen/snapcraft
General-Beck/snapcraft
JamesLinus/snapcraft
JuanJ67m/snapcraft
Laserbear/snapcraft
LefterisJP/snapcraft
Lingaprahasam/snapcraft
M0ses/snapcraft
Magical-Chicken/snapcraft
MaxLeiter/snapcraft
Mega-Tr0n/snapcraft
MonJamp/snapcraft
OddBloke/snapcraft
OpnSrcConstruction/snapcraft
RAOF/snapcraft
Roadmaster/snapcraft
RobLoach/snapcraft
SamYaple/snapcraft
SamuelWeiss/snapcraft
Saviq/snapcraft
StetHD/snapcraft
ZenHarbinger/snapcraft
albertodonato/snapcraft
aleixpol/snapcraft
alexcrichton/snapcraft
alextnewman/snapcraft
andyli/snapcraft
ankurjain41282/snapcraft
annesteenbeek/snapcraft
apachelogger/snapcraft
asac/snapcraft
attente/snapcraft
barkinet/snapcraft
battlemidget/snapcraft
bjornt/snapcraft
blakerouse/snapcraft
blimjoe/snapcraft
bloodearnest/snapcraft
bobolopolis/snapcraft
bogdanap/snapcraft
boghison/snapcraft
btenaglia/snapcraft
bzoltan1/snapcraft
caio1982/snapcraft
caldav/snapcraft
chadmiller/snapcraft
chenhan1218/snapcraft
chihchun/snapcraft
chipaca/snapcraft
cholcombe973/snapcraft
chrisglass/snapcraft
cjwatson/snapcraft
clobrano/snapcraft
codeofdusk/snapcraft
cpaelzer/snapcraft
cprov/snapcraft
cratliff/snapcraft
croepha/snapcraft
cwayne18/snapcraft
danklut/snapcraft
dholbach/snapcraft
diddledan/snapcraft
didrocks/snapcraft
dplanella/snapcraft
dpniel/snapcraft
dustinkirkland/snapcraft
earnubs/snapcraft
ehbello/snapcraft
elopio/snapcraft
evandandrea/snapcraft
facundobatista/snapcraft
fallen/snapcraft
fazerlicourice7/snapcraft
felicianotech/snapcraft
fgallina/snapcraft
fgimenez/snapcraft
filibtester/snapcraft
flexiondotorg/snapcraft
fmanea/snapcraft
fnordahl/snapcraft
franciscocpg/snapcraft
frankban/snapcraft
gnuoy/snapcraft
gsilvapt/snapcraft
gunawanw9/snapcraft
gxx9203/snapcraft
hasansaikat/snapcraft
jamiedbennett/snapcraft
javacruft/snapcraft
jaymell/snapcraft
jdxcode/snapcraft
jhobbs/snapcraft
jocave/snapcraft
joedborg/snapcraft
jonathon-love/snapcraft
jorgher/snapcraft
josepht/snapcraft
justincan/snapcraft
kissiel/snapcraft
kspviswa/snapcraft
kustomzone/snapcraft
kyrofa/snapcraft
larryprice/snapcraft
leecow/snapcraft
liu-xiao-guo/snapcraft
lool/snapcraft
m-shibata/snapcraft
malept/snapcraft
mariogrip/snapcraft
markshuttle/snapcraft
maxiberta/snapcraft
mbruzek/snapcraft
mhall119/snapcraft
mikemccracken/snapcraft
morphis/snapcraft
mrjogo/snapcraft
msis/snapcraft
mtau87/snapcraft
mvayngrib/snapcraft
mvo5/snapcraft
mwhudson/snapcraft
nathanhaines/snapcraft
naufraghi/snapcraft
nefelim/snapcraft
nhandler/snapcraft
nottrobin/snapcraft
nvcexploder/snapcraft
oSoMoN/snapcraft
ops-snappy/snapcraft
pachulo/snapcraft
pedrococa/snapcraft
piso77/snapcraft
plars/snapcraft
pombredanne/snapcraft
psivaa/snapcraft
q0wOp/snapcraft
rafaelcaricio/snapcraft
ralsina/snapcraft
rbreitenmoser/snapcraft
ricardokirkner/snapcraft
rmescandon/snapcraft
robert-ancell/snapcraft
robgev/snapcraft
robotlinker/snapcraft
rowhit/snapcraft
roxyd/snapcraft
sdeancos/snapcraft
seawaywen/snapcraft
seb128/snapcraft
sergiusens/snapcraft
shawn111/snapcraft
simon-jentzsch/snapcraft
sjpan/snapcraft
smith-i/snapcraft
smoser/snapcraft
snapcore-io-st/snapcraft
snappy-m-o/snapcraft
sparkiegeek/snapcraft
squidsoup/snapcraft
ssweeny/snapcraft
stephenbhope/snapcraft
stevenwilkin/snapcraft
stgraber/snapcraft
strukturag/snapcraft
stub42/snapcraft
surajwarrier05/snapcraft
tachyons/snapcraft
tasdomas/snapcraft
techraf/snapcraft
ted-gould/snapcraft
teknoraver/snapcraft
thomir/snapcraft
tim-sueberkrueb/snapcraft
timchen119/snapcraft
timjp87/snapcraft
torusJKL/snapcraft
tsdgeos/snapcraft
tsimonq2/snapcraft
tuksik/snapcraft
untriangle/snapcraft
vilagithub/snapcraft
vilvo/snapcraft
walimis/snapcraft
williamcrowe/snapcraft
yphus/snapcraft
yu-yang-halo/snapcraft
zhangtuoparis13/snapcraft
zyga/snapcraft
Nothing to show
Checking mergeability… Don’t worry, you can still create the pull request.
  • 4 commits
  • 5 files changed
  • 0 commit comments
  • 1 contributor
@@ -19,7 +19,7 @@
from .errors import GrammarSyntaxError
_ON_CLAUSE_PATTERN = re.compile(r'\Aon\s+')
-_TO_CLAUSE_PATTERN = re.compile(r'\Ato\s+')
+_TO_CLAUSE_PATTERN = re.compile(r'(\Aon\s+\S+\s+|)to\s+')
_TRY_CLAUSE_PATTERN = re.compile(r'\Atry\Z')
_ELSE_CLAUSE_PATTERN = re.compile(r'\Aelse\Z')
_ELSE_FAIL_PATTERN = re.compile(r'\Aelse\s+fail\Z')
@@ -75,26 +75,26 @@ def _parse_dict(section, statement, statements, project_options,
from ._try import TryStatement
for key, value in section.items():
- if _ON_CLAUSE_PATTERN.match(key):
- # We've come across the beginning of an 'on' statement.
+ if _TO_CLAUSE_PATTERN.match(key):
+ # We've come across the beginning of a 'to' statement.
# That means any previous statement we found is complete.
# The first time through this may be None, but the
# collection will ignore it.
statements.add(statement)
- statement = OnStatement(
- on=key, body=value, project_options=project_options,
+ statement = ToStatement(
+ to=key, body=value, project_options=project_options,
checker=checker)
- if _TO_CLAUSE_PATTERN.match(key):
- # We've come across the beginning of a 'to' statement.
+ elif _ON_CLAUSE_PATTERN.match(key):
+ # We've come across the beginning of an 'on' statement.
# That means any previous statement we found is complete.
# The first time through this may be None, but the
# collection will ignore it.
statements.add(statement)
- statement = ToStatement(
- to=key, body=value, project_options=project_options,
+ statement = OnStatement(
+ on=key, body=value, project_options=project_options,
checker=checker)
if _TRY_CLAUSE_PATTERN.match(key):
@@ -16,13 +16,15 @@
import re
+import snapcraft
from . import process_grammar
from .errors import (
ToStatementSyntaxError,
UnsatisfiedStatementError,
)
-_SELECTOR_PATTERN = re.compile(r'\Ato\s+([^,\s](?:,?[^,]+)*)\Z')
+_SELECTOR_PATTERN = re.compile(
+ r'(\Aon\s+[^,\s](?:,?[^,]+)*\s|)to\s+([^,\s](?:,?[^,]+)*)\Z')
_WHITESPACE_PATTERN = re.compile(r'\A.*\s.*\Z')
@@ -57,7 +59,7 @@ def __init__(self, *, to, body, project_options, checker):
:type checker: callable
"""
- self.selectors = _extract_to_clause_selectors(to)
+ self._on_selectors, self.selectors = _extract_to_clause_selectors(to)
self._body = body
self._project_options = project_options
self._checker = checker
@@ -82,11 +84,17 @@ def process(self):
primitives = set()
target_arch = self._project_options.deb_arch
+ host_arch = snapcraft.ProjectOptions().deb_arch
# The only selector currently supported is the target arch. Since
# selectors are matched with an AND, not OR, there should only be one
# selector.
- if (len(self.selectors) == 1) and (target_arch in self.selectors):
+ on_matches = (((len(self._on_selectors) == 1) and
+ host_arch in self._on_selectors) or
+ self._on_selectors == {''})
+ to_matches = ((len(self.selectors) == 1) and
+ (target_arch in self.selectors))
+ if on_matches and to_matches:
primitives = process_grammar(
self._body, self._project_options, self._checker)
# target arch is the default (not the host arch) in a to statement
@@ -123,18 +131,21 @@ def _extract_to_clause_selectors(to):
:param str to: The 'to <selector>' part of the 'to' clause.
- :return: Selectors found within the 'to' clause.
+ :return: Tuple of selectors found within a 'to' or 'on to' clause
:rtype: set
For example:
- >>> _extract_to_clause_selectors('to amd64,i386') == {'amd64', 'i386'}
+ >>> _extract_to_clause_selectors('to amd64,i386') == ({''},{'amd64', 'i386'})
True
- """
+ >>> _extract_to_clause_selectors('on amd64 to i386') == ({'amd64'},{'i386'})
+ True
+ """ # noqa
match = _SELECTOR_PATTERN.match(to)
try:
- selector_group = match.group(1)
+ on_selector_group = match.group(1)
+ selector_group = match.group(2)
except AttributeError:
raise ToStatementSyntaxError(to, message='selectors are missing')
except IndexError:
@@ -146,4 +157,6 @@ def _extract_to_clause_selectors(to):
raise ToStatementSyntaxError(
to, message='spaces are not allowed in the selectors')
- return {selector.strip() for selector in selector_group.split(',')}
+ return (
+ {selector.strip() for selector in on_selector_group[3:].split(',')},
+ {selector.strip() for selector in selector_group.split(',')})
@@ -130,6 +130,16 @@ def test_to_other_arch(self):
self.run_snapcraft(['pull'])
self.assertFalse(self._hello_is_installed())
+ def test_on_to_other_arch(self):
+ """Test that 'on to' fetches nothing when building for another arch."""
+
+ with self.modified_yaml() as yaml:
+ yaml['parts']['my-part']['build-packages'] = [
+ OrderedDict({'on i386 to other-arch': ['hello']})
+ ]
+ self.run_snapcraft(['pull'])
+ self.assertFalse(self._hello_is_installed())
+
def test_to_other_arch_else(self):
"""Test that 'to' moves to the 'else' branch if on other arch."""
@@ -141,6 +151,17 @@ def test_to_other_arch_else(self):
self.run_snapcraft(['pull'])
self.assertTrue(self._hello_is_installed())
+ def test_on_to_other_arch_else(self):
+ """Test that 'on to' moves to the 'else' branch if on other arch."""
+
+ with self.modified_yaml() as yaml:
+ yaml['parts']['my-part']['build-packages'] = [
+ OrderedDict({'on i386 to other-arch': ['foo']}),
+ OrderedDict({'else': ['hello']})
+ ]
+ self.run_snapcraft(['pull'])
+ self.assertTrue(self._hello_is_installed())
+
def test_to_other_arch_else_fail(self):
"""Test that 'on' fails with an error if it hits an 'else fail'."""
@@ -154,6 +175,19 @@ def test_to_other_arch_else_fail(self):
['pull']).output, Contains(
"Unable to satisfy 'to other-arch', failure forced"))
+ def test_on_to_other_arch_else_fail(self):
+ """Test that 'on to' fails with an error if it hits an 'else fail'."""
+
+ with self.modified_yaml() as yaml:
+ yaml['parts']['my-part']['build-packages'] = [
+ OrderedDict({'on i386 to other-arch': ['foo']}),
+ 'else fail'
+ ]
+ self.assertThat(self.assertRaises(
+ subprocess.CalledProcessError, self.run_snapcraft,
+ ['pull']).output, Contains(
+ "Unable to satisfy 'to other-arch', failure forced"))
+
def test_global_build_package_to_other_arch_else(self):
"""Test that grammar works in global build packages as well."""
@@ -164,3 +198,14 @@ def test_global_build_package_to_other_arch_else(self):
]
self.run_snapcraft(['pull'])
self.assertTrue(self._hello_is_installed())
+
+ def test_global_build_package_on_to_other_arch_else(self):
+ """Test that grammar works in global build packages as well."""
+
+ with self.modified_yaml('build-package-grammar-global') as yaml:
+ yaml['build-packages'] = [
+ OrderedDict({'on i386 to other-arch': ['foo']}),
+ OrderedDict({'else': ['hello']}),
+ ]
+ self.run_snapcraft(['pull'])
+ self.assertTrue(self._hello_is_installed())
@@ -118,6 +118,18 @@ def test_to_other_arch(self):
os.path.join('prime', 'usr', 'bin', 'hello'),
Not(FileExists()))
+ def test_on_to_other_arch(self):
+ """Test that 'on to' for the other arch fetches nothing."""
+
+ with self.modified_yaml() as yaml:
+ yaml['parts']['simple']['stage-packages'] = [
+ OrderedDict({'on i386 to other-arch': ['hello']}),
+ ]
+ self.run_snapcraft(['prime', 'simple'])
+ self.assertThat(
+ os.path.join('prime', 'usr', 'bin', 'hello'),
+ Not(FileExists()))
+
def test_to_other_arch_else(self):
"""Test that 'else' for the other arch fetches hello."""
@@ -131,6 +143,19 @@ def test_to_other_arch_else(self):
os.path.join('prime', 'usr', 'bin', 'hello'),
FileExists())
+ def test_on_to_other_arch_else(self):
+ """Test that 'else' for the other arch fetches hello."""
+
+ with self.modified_yaml() as yaml:
+ yaml['parts']['simple']['stage-packages'] = [
+ OrderedDict({'on i386 to other-arch': ['foo']}),
+ OrderedDict({'else': ['hello']}),
+ ]
+ self.run_snapcraft(['prime', 'simple'])
+ self.assertThat(
+ os.path.join('prime', 'usr', 'bin', 'hello'),
+ FileExists())
+
def test_to_other_arch_else_fail(self):
"""Test that 'else' for the other arch fails."""
@@ -145,3 +170,18 @@ def test_to_other_arch_else_fail(self):
self.assertThat(exception.output, Contains(
"Unable to satisfy 'to other-arch', failure forced"))
+
+ def test_on_to_other_arch_else_fail(self):
+ """Test that 'else' for the other arch fails."""
+
+ with self.modified_yaml() as yaml:
+ yaml['parts']['simple']['stage-packages'] = [
+ OrderedDict({'on i386 to other-arch': ['foo']}),
+ 'else fail',
+ ]
+ exception = self.assertRaises(
+ subprocess.CalledProcessError, self.run_snapcraft,
+ ['prime', 'simple'])
+
+ self.assertThat(exception.output, Contains(
+ "Unable to satisfy 'to other-arch', failure forced"))
@@ -173,6 +173,22 @@ class ToStatementGrammarTestCase(GrammarTestCase):
'target_arch': 'i386',
'expected_packages': {'baz'}
}),
+ ('on amd64 to armhf', {
+ 'to': 'on amd64 to armhf',
+ 'body': ['foo'],
+ 'else_bodies': [],
+ 'target_arch': 'armhf',
+ 'expected_packages': {'foo:armhf'}
+ }),
+ ('on i386 to armhf, used else', {
+ 'to': 'on i386 to armhf',
+ 'body': ['foo'],
+ 'else_bodies': [
+ ['bar']
+ ],
+ 'target_arch': 'armhf',
+ 'expected_packages': {'bar'}
+ }),
]
@patch('platform.architecture')

No commit comments for this range