Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rebase Workspaces on Editable packages #4481

Merged
merged 47 commits into from Feb 26, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
760cfa8
rebasing ws
memsharded Jan 11, 2019
bc60a75
all tests passing but WS ones
memsharded Jan 11, 2019
9b9cc2d
working, new command workspace install
memsharded Jan 11, 2019
a07c0b9
merged develop
memsharded Jan 11, 2019
ff88550
working
memsharded Jan 11, 2019
b98f3a8
merged develop
memsharded Jan 29, 2019
3c24b95
working...
memsharded Feb 4, 2019
f09cfdd
working
memsharded Feb 4, 2019
32ae964
Merge branch 'develop' into feature/rebasing_ws
memsharded Feb 6, 2019
52c8b43
ws tests
memsharded Feb 6, 2019
e0da0c4
missing import
memsharded Feb 6, 2019
e02045e
fixing tests
memsharded Feb 7, 2019
369641b
add some sleeps to test
memsharded Feb 7, 2019
4103b06
more sleeps
memsharded Feb 7, 2019
57b134e
trying new approach for src, build folder in meta-generator
memsharded Feb 7, 2019
51753a6
time.sleep again
memsharded Feb 7, 2019
65dc944
another sleep
memsharded Feb 8, 2019
8657130
working
memsharded Feb 8, 2019
db9615a
Merge branch 'develop' into feature/rebasing_ws
memsharded Feb 8, 2019
848266d
checks
memsharded Feb 8, 2019
bfd7845
merged develop, solved conflicts
memsharded Feb 11, 2019
f82bb47
fixed dedents
memsharded Feb 11, 2019
522d846
merged develop
memsharded Feb 11, 2019
f2133fe
review
memsharded Feb 11, 2019
965b831
Merge branch 'develop' into feature/rebasing_ws
memsharded Feb 13, 2019
efe39db
review
memsharded Feb 13, 2019
29051d2
fixing tests
memsharded Feb 14, 2019
cb889ea
more time.sleep in test
memsharded Feb 14, 2019
b74554b
review
memsharded Feb 18, 2019
81de4a8
merged develop
memsharded Feb 18, 2019
5d2153e
solve merge issues
memsharded Feb 19, 2019
b0300aa
adding generators
memsharded Feb 19, 2019
d0a98f5
make sure develop=True for editable packages
memsharded Feb 19, 2019
8d31bdb
Merge branch 'develop' into feature/rebasing_ws
memsharded Feb 20, 2019
f57d889
review
memsharded Feb 20, 2019
78ca3df
Merge branch 'develop' into feature/rebasing_ws
memsharded Feb 21, 2019
8b75eff
fix tests
memsharded Feb 21, 2019
0529a36
configuration print of workspaces
memsharded Feb 22, 2019
2656bfd
arg.path name changed
memsharded Feb 22, 2019
5d1377a
fixed tests
memsharded Feb 22, 2019
c1f46bb
Merge branch 'develop' into feature/rebasing_ws
memsharded Feb 25, 2019
ca11c38
review!
memsharded Feb 25, 2019
b6a4819
fixed bug in generators
memsharded Feb 25, 2019
85fce39
fixing root folders in layout
memsharded Feb 26, 2019
5c780cd
checks for conanws file syntax
memsharded Feb 26, 2019
8d8a417
review parsing
memsharded Feb 26, 2019
1b64402
raise only in one place
memsharded Feb 26, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
23 changes: 17 additions & 6 deletions conans/model/workspace.py
Expand Up @@ -14,21 +14,26 @@
class LocalPackage(object):
def __init__(self, base_folder, data, cache, ws_layout, ws_generators):
self._base_folder = base_folder
self._conanfile_folder = data.get("path") # The folder with the conanfile
layout = data.get("layout")
self._conanfile_folder = data.pop("path", None) # The folder with the conanfile
if self._conanfile_folder is None:
raise ConanException("Workspace editable does not define path")
layout = data.pop("layout", None)
if layout:
self.layout = get_editable_abs_path(data.get("layout"), self._base_folder,
self.layout = get_editable_abs_path(layout, self._base_folder,
cache.conan_folder)
else:
self.layout = ws_layout

generators = data.get("generators")
generators = data.pop("generators", None)
if isinstance(generators, str):
generators = [generators]
if generators is None:
generators = ws_generators
self.generators = generators

if data:
raise ConanException("Workspace unrecognized fields: %s" % data)

@property
def root_folder(self):
return os.path.abspath(os.path.join(self._base_folder, self._conanfile_folder))
Expand Down Expand Up @@ -116,12 +121,18 @@ def _loads(self, text):
if not self._root:
raise ConanException("Conan workspace needs at least 1 root conanfile")

editables = yml.pop("editables", None)
editables = yml.pop("editables", {})
for package_name, data in editables.items():
if not data:
memsharded marked this conversation as resolved.
Show resolved Hide resolved
raise ConanException("Workspace editable %s does not define data"
% str(package_name))
workspace_package = LocalPackage(self._base_folder, data,
self._cache, ws_layout, generators)
package_name = ConanFileReference.loads(package_name)
self._workspace_packages[package_name] = workspace_package
for package_name in self._root:
if package_name not in self._workspace_packages:
raise ConanException("Root %s is not a local package" % package_name)
raise ConanException("Root %s is not defined as editable" % str(package_name))

if yml:
raise ConanException("Workspace unrecognized fields: %s" % yml)
65 changes: 64 additions & 1 deletion conans/test/integration/workspace_test.py
Expand Up @@ -8,7 +8,10 @@

from conans.client import tools
from conans.test.utils.tools import TestClient
from conans.util.files import load
from conans.util.files import load, save
from conans.test.utils.test_files import temp_folder
from conans.model.workspace import Workspace
from conans.errors import ConanException


conanfile_build = """from conans import ConanFile, CMake
Expand Down Expand Up @@ -89,6 +92,66 @@ def package_info(self):


class WorkspaceTest(unittest.TestCase):

def parse_test(self):
folder = temp_folder()
path = os.path.join(folder, "conanws.yml")
project = "root: Hellob/0.1@lasote/stable"
save(path, project)
with self.assertRaisesRegexp(ConanException,
"Root Hellob/0.1@lasote/stable is not defined as editable"):
Workspace(path, None)

project = dedent("""
editables:
HelloB/0.1@lasote/stable:
path: B
random: something
root: HelloB/0.1@lasote/stable
""")
save(path, project)

with self.assertRaisesRegexp(ConanException,
"Workspace unrecognized fields: {'random': 'something'}"):
Workspace(path, None)

project = dedent("""
editables:
HelloB/0.1@lasote/stable:
path: B
root: HelloB/0.1@lasote/stable
random: something
""")
save(path, project)

with self.assertRaisesRegexp(ConanException,
"Workspace unrecognized fields: {'random': 'something'}"):
Workspace(path, None)

project = dedent("""
editables:
HelloB/0.1@lasote/stable:
root: HelloB/0.1@lasote/stable
""")
save(path, project)

with self.assertRaisesRegexp(ConanException,
"Workspace editable HelloB/0.1@lasote/stable "
"does not define data"):
Workspace(path, None)

project = dedent("""
editables:
HelloB/0.1@lasote/stable:
layout: layout
root: HelloB/0.1@lasote/stable
""")
save(path, project)

with self.assertRaisesRegexp(ConanException,
"Workspace editable does not define path"):
Workspace(path, None)

def simple_test(self):
client = TestClient()

Expand Down