Merge pull request #2373 from leiflm/svn-wraps

introduce svn wrap support
pull/2410/head
Jussi Pakkanen 7 years ago committed by GitHub
commit 7d49d1d2d7
  1. 4
      docs/markdown/snippets/wrap-svn.md
  2. 10
      manual tests/10 svn wrap/meson.build
  3. 6
      manual tests/10 svn wrap/prog.c
  4. 4
      manual tests/10 svn wrap/subprojects/samplesubproject.wrap
  5. 26
      mesonbuild/wrap/wrap.py

@ -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.

@ -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)

@ -0,0 +1,6 @@
#include"subproj.h"
int main(int argc, char **argv) {
subproj_function();
return 0;
}

@ -0,0 +1,4 @@
[wrap-svn]
directory=samplesubproject
url=https://svn.code.sf.net/p/mesonsubproject/code/trunk
revision=head

@ -19,6 +19,7 @@ import subprocess
import sys
from pathlib import Path
from . import WrapMode
from ..mesonlib import Popen_safe
try:
import ssl
@ -78,6 +79,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 +148,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 +233,27 @@ 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:
p, out = Popen_safe(['svn', 'info', '--show-item', 'revision', checkoutdir])
current_revno = out
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:
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)
def get_data(self, url):
blocksize = 10 * 1024
h = hashlib.sha256()

Loading…
Cancel
Save