From 667d5d2d9f6f6b4a004616595477f9ac59473525 Mon Sep 17 00:00:00 2001 From: Leif Middelschulte Date: Mon, 25 Sep 2017 21:00:02 +0200 Subject: introduce svn wrap support --- mesonbuild/wrap/wrap.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'mesonbuild/wrap/wrap.py') diff --git a/mesonbuild/wrap/wrap.py b/mesonbuild/wrap/wrap.py index 933bbd5..3c0e620 100644 --- a/mesonbuild/wrap/wrap.py +++ b/mesonbuild/wrap/wrap.py @@ -78,6 +78,8 @@ class PackageDefinition: self.type = 'git' elif first == '[wrap-hg]': self.type = 'hg' + elif first == '[wrap-svn]': + self.type = 'svn' else: raise RuntimeError('Invalid format of package file') for line in ifile: @@ -145,6 +147,8 @@ class Resolver: self.get_git(p) elif p.type == "hg": self.get_hg(p) + elif p.type == "svn": + self.get_svn(p) else: raise AssertionError('Unreachable code.') return p.get('directory') @@ -228,6 +232,28 @@ class Resolver: subprocess.check_call(['hg', 'checkout', revno], cwd=checkoutdir) + def get_svn(self, p): + checkoutdir = os.path.join(self.subdir_root, p.get('directory')) + revno = p.get('revision') + is_there = os.path.isdir(checkoutdir) + if is_there: + if revno.lower() == 'head': + # Failure to do pull is not a fatal error, + # because otherwise you can't develop without + # a working net connection. + subprocess.call(['svn', 'update'], cwd=checkoutdir) + else: + if subprocess.call(['svn', 'update', '-r', revno], cwd=checkoutdir) != 0: + subprocess.check_call(['svn', 'update'], cwd=checkoutdir) + subprocess.check_call(['svn', 'update', '-r', revno], + cwd=checkoutdir) + else: + subprocess.check_call(['svn', 'checkout', p.get('url'), + p.get('directory')], cwd=self.subdir_root) + if revno.lower() != 'head': + subprocess.check_call(['svn', 'checkout', '-r', revno], + cwd=checkoutdir) + def get_data(self, url): blocksize = 10 * 1024 if url.startswith('https://wrapdb.mesonbuild.com'): -- cgit v1.1 From aa28675ebc1742f78b0ac61bda512035a7a5cb4c Mon Sep 17 00:00:00 2001 From: Leif Middelschulte Date: Tue, 26 Sep 2017 13:13:46 +0200 Subject: fixes initial checkout command independend of provided revision --- mesonbuild/wrap/wrap.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'mesonbuild/wrap/wrap.py') diff --git a/mesonbuild/wrap/wrap.py b/mesonbuild/wrap/wrap.py index 3c0e620..e7f9655 100644 --- a/mesonbuild/wrap/wrap.py +++ b/mesonbuild/wrap/wrap.py @@ -248,11 +248,8 @@ class Resolver: subprocess.check_call(['svn', 'update', '-r', revno], cwd=checkoutdir) else: - subprocess.check_call(['svn', 'checkout', p.get('url'), + subprocess.check_call(['svn', 'checkout', '-r', revno, p.get('url'), p.get('directory')], cwd=self.subdir_root) - if revno.lower() != 'head': - subprocess.check_call(['svn', 'checkout', '-r', revno], - cwd=checkoutdir) def get_data(self, url): blocksize = 10 * 1024 -- cgit v1.1 From fab15d433a209a8487c98d82db1aa2fc4400c818 Mon Sep 17 00:00:00 2001 From: Leif Middelschulte Date: Tue, 26 Sep 2017 13:56:58 +0200 Subject: fixes offline working (if desired revision is already present). --- mesonbuild/wrap/wrap.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'mesonbuild/wrap/wrap.py') diff --git a/mesonbuild/wrap/wrap.py b/mesonbuild/wrap/wrap.py index e7f9655..7cdf10e 100644 --- a/mesonbuild/wrap/wrap.py +++ b/mesonbuild/wrap/wrap.py @@ -237,16 +237,18 @@ class Resolver: revno = p.get('revision') is_there = os.path.isdir(checkoutdir) if is_there: + svn_info_output = subprocess.getoutput(' '.join(['svn', 'info', '--show-item', 'revision', checkoutdir])) + current_revno = int(svn_info_output) + if current_revno == revno: + return + if revno.lower() == 'head': # Failure to do pull is not a fatal error, # because otherwise you can't develop without # a working net connection. subprocess.call(['svn', 'update'], cwd=checkoutdir) else: - if subprocess.call(['svn', 'update', '-r', revno], cwd=checkoutdir) != 0: - subprocess.check_call(['svn', 'update'], cwd=checkoutdir) - subprocess.check_call(['svn', 'update', '-r', revno], - cwd=checkoutdir) + subprocess.check_call(['svn', 'update', '-r', revno], cwd=checkoutdir) else: subprocess.check_call(['svn', 'checkout', '-r', revno, p.get('url'), p.get('directory')], cwd=self.subdir_root) -- cgit v1.1 From 993a12c543e24058a43c68b75f7b03afc245d1ce Mon Sep 17 00:00:00 2001 From: Leif Middelschulte Date: Tue, 26 Sep 2017 14:01:29 +0200 Subject: avoid errornous type conversion. Compare strings instead --- mesonbuild/wrap/wrap.py | 1 - 1 file changed, 1 deletion(-) (limited to 'mesonbuild/wrap/wrap.py') diff --git a/mesonbuild/wrap/wrap.py b/mesonbuild/wrap/wrap.py index 7cdf10e..9a779dc 100644 --- a/mesonbuild/wrap/wrap.py +++ b/mesonbuild/wrap/wrap.py @@ -238,7 +238,6 @@ class Resolver: is_there = os.path.isdir(checkoutdir) if is_there: svn_info_output = subprocess.getoutput(' '.join(['svn', 'info', '--show-item', 'revision', checkoutdir])) - current_revno = int(svn_info_output) if current_revno == revno: return -- cgit v1.1 From 50376cca37324594c4f7ff9007b50ae837b46be2 Mon Sep 17 00:00:00 2001 From: Leif Middelschulte Date: Tue, 26 Sep 2017 14:03:07 +0200 Subject: fixup 993a12c5: use right variable --- mesonbuild/wrap/wrap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mesonbuild/wrap/wrap.py') diff --git a/mesonbuild/wrap/wrap.py b/mesonbuild/wrap/wrap.py index 9a779dc..436dc56 100644 --- a/mesonbuild/wrap/wrap.py +++ b/mesonbuild/wrap/wrap.py @@ -237,7 +237,7 @@ class Resolver: revno = p.get('revision') is_there = os.path.isdir(checkoutdir) if is_there: - svn_info_output = subprocess.getoutput(' '.join(['svn', 'info', '--show-item', 'revision', checkoutdir])) + current_revno = subprocess.getoutput(' '.join(['svn', 'info', '--show-item', 'revision', checkoutdir])) if current_revno == revno: return -- cgit v1.1 From 078527a744b7903758758469077f10d6b9bf37b3 Mon Sep 17 00:00:00 2001 From: Leif Middelschulte Date: Sat, 30 Sep 2017 19:45:24 +0200 Subject: As per jpakkane's suggestion use `Popen_safe` instead of `subprocess.getoutput` Jussi suggested to use `Popen_safe` from meson's library for portability reasons. --- mesonbuild/wrap/wrap.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'mesonbuild/wrap/wrap.py') diff --git a/mesonbuild/wrap/wrap.py b/mesonbuild/wrap/wrap.py index 436dc56..387a05c 100644 --- a/mesonbuild/wrap/wrap.py +++ b/mesonbuild/wrap/wrap.py @@ -237,7 +237,8 @@ class Resolver: revno = p.get('revision') is_there = os.path.isdir(checkoutdir) if is_there: - current_revno = subprocess.getoutput(' '.join(['svn', 'info', '--show-item', 'revision', checkoutdir])) + p, out = Popen_safe(['svn', 'info', '--show-item', 'revision', checkoutdir]) + current_revno = out if current_revno == revno: return -- cgit v1.1 From a90e47bd4f0f81c156c582f00d3cc005887547e2 Mon Sep 17 00:00:00 2001 From: Leif Middelschulte Date: Sat, 30 Sep 2017 19:49:14 +0200 Subject: adds missing import of `Popen_safe` --- mesonbuild/wrap/wrap.py | 1 + 1 file changed, 1 insertion(+) (limited to 'mesonbuild/wrap/wrap.py') diff --git a/mesonbuild/wrap/wrap.py b/mesonbuild/wrap/wrap.py index 387a05c..1678e35 100644 --- a/mesonbuild/wrap/wrap.py +++ b/mesonbuild/wrap/wrap.py @@ -19,6 +19,7 @@ import subprocess import sys from pathlib import Path from . import WrapMode +from ..mesonlib import Popen_safe try: import ssl -- cgit v1.1