From 667d5d2d9f6f6b4a004616595477f9ac59473525 Mon Sep 17 00:00:00 2001 From: Leif Middelschulte Date: Mon, 25 Sep 2017 21:00:02 +0200 Subject: [PATCH] introduce svn wrap support --- docs/markdown/snippets/wrap-svn.md | 4 +++ manual tests/10 svn wrap/meson.build | 10 +++++++ manual tests/10 svn wrap/prog.c | 6 +++++ .../subprojects/samplesubproject.wrap | 4 +++ mesonbuild/wrap/wrap.py | 26 +++++++++++++++++++ 5 files changed, 50 insertions(+) create mode 100644 docs/markdown/snippets/wrap-svn.md create mode 100644 manual tests/10 svn wrap/meson.build create mode 100644 manual tests/10 svn wrap/prog.c create mode 100644 manual tests/10 svn wrap/subprojects/samplesubproject.wrap diff --git a/docs/markdown/snippets/wrap-svn.md b/docs/markdown/snippets/wrap-svn.md new file mode 100644 index 000000000..cdf155bde --- /dev/null +++ b/docs/markdown/snippets/wrap-svn.md @@ -0,0 +1,4 @@ +# wrap-svn + +The [Wrap dependency system](Wrap-dependency-system-manual.md) now supports [Subversion](https://subversion.apache.org/) (svn). +This support is rudimentary. The repository url has to point to a specific (sub)directory containing the `meson.build` file (typically `trunk/`). However, providing a `revision` is supported. diff --git a/manual tests/10 svn wrap/meson.build b/manual tests/10 svn wrap/meson.build new file mode 100644 index 000000000..23ef1f10d --- /dev/null +++ b/manual tests/10 svn wrap/meson.build @@ -0,0 +1,10 @@ +project('Subversion outchecker', 'c') + +sp = subproject('samplesubproject') + +exe = executable('gitprog', 'prog.c', +include_directories : sp.get_variable('subproj_inc'), +link_with : sp.get_variable('subproj_lib'), +) + +test('maintest', exe) diff --git a/manual tests/10 svn wrap/prog.c b/manual tests/10 svn wrap/prog.c new file mode 100644 index 000000000..df38000ec --- /dev/null +++ b/manual tests/10 svn wrap/prog.c @@ -0,0 +1,6 @@ +#include"subproj.h" + +int main(int argc, char **argv) { + subproj_function(); + return 0; +} diff --git a/manual tests/10 svn wrap/subprojects/samplesubproject.wrap b/manual tests/10 svn wrap/subprojects/samplesubproject.wrap new file mode 100644 index 000000000..2fafa8d6e --- /dev/null +++ b/manual tests/10 svn wrap/subprojects/samplesubproject.wrap @@ -0,0 +1,4 @@ +[wrap-svn] +directory=samplesubproject +url=https://leif.svn.beanstalkapp.com/samplesubproject/trunk +revision=head diff --git a/mesonbuild/wrap/wrap.py b/mesonbuild/wrap/wrap.py index 933bbd57d..3c0e620c1 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'):