Skip to content

Commit 4e91daf

Browse files
committed
final tweaks
Signed-off-by: Matthew Ballance <matt.ballance@gmail.com>
1 parent d5ac865 commit 4e91daf

16 files changed

+270
-192
lines changed

src/ivpm/cmds/cmd_update.py

-25
Original file line numberDiff line numberDiff line change
@@ -48,30 +48,5 @@ def __call__(self, args):
4848
# SveFilelistWriter(OutWrapper(fp)).write(pkgs_info)
4949

5050

51-
# def _write_requirements_txt(self,
52-
# packages_dir,
53-
# python_pkgs : List[Package],
54-
# file):
55-
# with open(file, "w") as fp:
56-
# for pkg in python_pkgs:
57-
58-
# if pkg.url is not None:
59-
# # Editable package
60-
# # fp.write("-e file://%s/%s#egg=%s\n" % (
61-
# # packages_dir.replace("\\","/"),
62-
# # pkg.name,
63-
# # pkg.name))
64-
# fp.write("-e %s/%s\n" % (
65-
# packages_dir.replace("\\","/"),
66-
# pkg.name))
67-
# else:
68-
# # PyPi package
69-
# if pkg.version is not None:
70-
# if pkg.version[0] in ['<','>','=']:
71-
# fp.write("%s%s\n" % (pkg.name, pkg.version))
72-
# else:
73-
# fp.write("%s==%s\n" % (pkg.name, pkg.version))
74-
# else:
75-
# fp.write("%s\n" % pkg.name)
7651

7752

src/ivpm/ivpm_yaml_reader.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import os
77
import yaml_srcinfo_loader
88
from yaml_srcinfo_loader.srcinfo import SrcInfo
9-
from .package_factory_rgy import PackageFactoryRgy
109
from .package_factory import PackageFactory
1110
from .package import Package
1211

@@ -115,6 +114,7 @@ def read_dep_sets(self, info : ProjInfo, dep_sets):
115114

116115

117116
def read_deps(self, ret : PackagesInfo, deps):
117+
from .package_factory_rgy import PackageFactoryRgy
118118

119119
for d in deps:
120120
si = d.srcinfo

src/ivpm/package.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -71,22 +71,24 @@ class SourceType(Enum):
7171
@dc.dataclass
7272
class Package(object):
7373
"""Contains leaf-level information about a single package"""
74-
7574
name : str
7675
srcinfo : object = None
7776
path : str = None
7877
pkg_type : PackageType = None
7978
src_type : str = None
8079

8180
process_deps : bool = True
82-
setup_deps : Set = dc.field(default_factory=set)
81+
setup_deps : Set[str] = dc.field(default_factory=set)
8382
dep_set : str = "default"
83+
proj_info : 'ProjInfo'= None
8484

8585
def build(self, pkgs_info):
8686
pass
8787

8888
def update(self, update_info : UpdateInfo) -> 'ProjInfo':
8989
from .project_info_reader import ProjectInfoReader
90+
from .proj_info import ProjInfo
91+
9092
info = ProjectInfoReader(
9193
os.path.join(update_info.deps_dir, self.name)).read()
9294

src/ivpm/package_factory.py

-6
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,6 @@ def process_options(self, p : Package, d : Dict, si):
4747
type_s, getlocstr(d["type"])))
4848

4949
p.pkg_type = Spec2PackageType[type_s]
50-
else:
51-
# if url is None and pkg.src_type != SourceType.PyPi:
52-
# fatal("no type specified for package %s and no URL specified" % pkg.name)
53-
# else:
54-
# # We'll need to auto-probe later once we have source
55-
p.pkg_type = PackageType.Unknown
5650

5751
def create(self, name, opts, si) -> Package:
5852
p = Package(name)

src/ivpm/package_factory_file.py

+27
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,40 @@
1919
#* Author:
2020
#*
2121
#****************************************************************************
22+
import os
23+
from typing import Dict
2224
from .package_factory_url import PackageFactoryURL
2325
from .package_file import PackageFile
2426

2527
class PackageFactoryFile(PackageFactoryURL):
2628
src = "file"
2729
description = "Core fetch fetcher"
2830

31+
def process_options(self, p: PackageFile, d: Dict, si):
32+
super().process_options(p, d, si)
33+
34+
35+
if "src" in d.keys():
36+
p.src_type = d["src"]
37+
else:
38+
ext = os.path.splitext(p.url)
39+
if ext == ".tgz":
40+
p.src_type = ".tar.gz"
41+
else:
42+
p.src_type = os.path.splitext(p.url)[1]
43+
if p.src_type in [".gz", ".xz", ".bz2"]:
44+
pdot = p.url.rfind('.')
45+
pdot = p.url.rfind('.', 0, pdot-1)
46+
p.src_type = p.url[pdot:]
47+
48+
if "unpack" in d.keys():
49+
p.unpack = d["unpack"]
50+
else:
51+
if p.src_type in [".jar"]:
52+
p.unpack = False
53+
else:
54+
p.unpack = True
55+
2956
def create(self, name, opts, si) -> PackageFile:
3057
p = PackageFile(name)
3158
self.process_options(p, opts, si)

src/ivpm/package_factory_http.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@
2020
#*
2121
#****************************************************************************
2222
from ivpm.package import Package
23-
from .package_factory_url import PackageFactoryURL
23+
from .package_factory_file import PackageFactoryFile
2424
from .package_http import PackageHttp
2525

26-
class PackageFactoryHttp(PackageFactoryURL):
26+
class PackageFactoryHttp(PackageFactoryFile):
2727
src = "http"
2828
description = "HTTP fetcher"
2929

src/ivpm/package_factory_pypi.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,10 @@ class PackageFactoryPyPi(PackageFactory):
3030

3131
def process_options(self, p: Package, d: Dict, si):
3232
super().process_options(p, d, si)
33+
p.src_type = PackageFactoryPyPi.src
3334

3435
if "version" in d.keys():
35-
p = d["version"]
36+
p.version = d["version"]
3637

3738
def create(self, name, opts, si) -> PackagePyPi:
3839
p = PackagePyPi(name)

src/ivpm/package_file.py

+28-28
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
@dc.dataclass
3333
class PackageFile(PackageURL):
34+
unpack : bool = None
3435

3536
def update(self, update_info : UpdateInfo) -> ProjInfo:
3637
from .project_info_reader import ProjectInfoReader
@@ -44,39 +45,38 @@ def update(self, update_info : UpdateInfo) -> ProjInfo:
4445
info : ProjInfo = ProjectInfoReader(pkg_dir).read()
4546

4647
return info
48+
49+
def _install(self, pkg_src, pkg_path):
50+
if self.src_type in (".tar.gz", ".tar.xz", ".tar.bz2"):
51+
self._install_tgz(pkg_src, pkg_path)
52+
elif self.src_type in (".jar", ".zip"):
53+
self._install_zip(pkg_src, pkg_path)
54+
else:
55+
raise Exception("Unsupported src_type: %s" % self.src_type)
4756

48-
def _install_tgz(self, pkg, pkg_path):
57+
def _install_tgz(self, pkg_src, pkg_path):
4958
cwd = os.getcwd()
50-
os.chdir(self.packages_dir)
59+
try:
60+
os.chdir(os.path.dirname(pkg_path))
5161

52-
tf = tarfile.open(pkg_path)
53-
54-
for fi in tf:
55-
if fi.name.find("/") != -1:
56-
fi.name = fi.name[fi.name.find("/")+1:]
57-
tf.extract(fi, path=pkg.name)
58-
tf.close()
62+
tf = tarfile.open(pkg_src)
5963

60-
os.chdir(cwd)
64+
for fi in tf:
65+
if fi.name.find("/") != -1:
66+
fi.name = fi.name[fi.name.find("/")+1:]
67+
tf.extract(fi, path=os.path.basename(pkg_path))
68+
tf.close()
69+
finally:
70+
os.chdir(cwd)
6171

62-
def _install_zip(self, pkg, pkg_path):
63-
ext = os.path.splitext(pkg.name)[1]
64-
65-
if ext == "":
66-
if self.debug:
67-
print("_install_zip: %s %s" % (str(pkg), str(pkg_path)))
72+
def _install_zip(self, pkg_src, pkg_path):
6873
cwd = os.getcwd()
69-
os.chdir(self.packages_dir)
70-
sys.stdout.flush()
71-
with ZipFile(pkg_path, 'r') as zipObj:
72-
zipObj.extractall(pkg.name)
73-
os.chdir(cwd)
74-
else:
75-
# Copy the .zip file to the destination
76-
if self.debug:
77-
print("_install_zip: copy file")
78-
shutil.copyfile(
79-
pkg_path,
80-
os.path.join(self.packages_dir, pkg.name))
74+
try:
75+
os.chdir(os.path.dirname(pkg_path))
76+
sys.stdout.flush()
77+
with ZipFile(pkg_src, 'r') as zipObj:
78+
zipObj.extractall(os.path.basename(pkg_path))
79+
finally:
80+
os.chdir(cwd)
8181

8282

src/ivpm/package_git.py

+11-5
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import subprocess
2525
import dataclasses as dc
2626
from .package import Package
27+
from .proj_info import ProjInfo
28+
from .project_info_reader import ProjectInfoReader
2729
from .update_info import UpdateInfo
2830
from .utils import note, fatal
2931

@@ -35,7 +37,7 @@ class PackageGit(Package):
3537
depth : str = None
3638
anonymous : bool = None
3739

38-
def update(self, update_info : UpdateInfo):
40+
def update(self, update_info : UpdateInfo) -> ProjInfo:
3941
pkg_dir = os.path.join(update_info.deps_dir, self.name)
4042
self.path = pkg_dir.replace("\\", "/")
4143

@@ -97,9 +99,13 @@ def update(self, update_info : UpdateInfo):
9799

98100

99101
# TODO: Existence of .gitmodules should trigger this
100-
os.chdir(os.path.join(update_info.deps_dir, self.name))
101-
sys.stdout.flush()
102-
status = os.system("git submodule update --init --recursive")
103-
os.chdir(cwd)
102+
if os.path.isfile(os.path.join(update_info.deps_dir, self.name, ".gitmodules")):
103+
os.chdir(os.path.join(update_info.deps_dir, self.name))
104+
sys.stdout.flush()
105+
status = os.system("git submodule update --init --recursive")
106+
os.chdir(cwd)
107+
108+
proj_info = ProjectInfoReader(pkg_dir).read()
109+
return proj_info
104110

105111

0 commit comments

Comments
 (0)