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 43 commits
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
6 changes: 3 additions & 3 deletions conans/client/build/cmake.py
Expand Up @@ -14,7 +14,6 @@
from conans.client.tools.oss import cpu_count, args_to_string
from conans.util.config_parser import get_bool_from_text
from conans.util.files import mkdir, get_abs_path, walk, decode_text
from conans.util.env_reader import get_env


class CMake(object):
Expand All @@ -31,8 +30,9 @@ def __init__(self, conanfile, generator=None, cmake_system_name=True,
:param build_type: Overrides default build type coming from settings
:param toolset: Toolset name to use (such as llvm-vs2014) or none for default one,
applies only to certain generators (e.g. Visual Studio)
:param set_cmake_flags: whether or not to set CMake flags like CMAKE_CXX_FLAGS, CMAKE_C_FLAGS, etc.
it's vital to set for certain projects (e.g. using CMAKE_SIZEOF_VOID_P or CMAKE_LIBRARY_ARCHITECTURE)
:param set_cmake_flags: whether or not to set CMake flags like CMAKE_CXX_FLAGS,
CMAKE_C_FLAGS, etc. it's vital to set for certain projects
(e.g. using CMAKE_SIZEOF_VOID_P or CMAKE_LIBRARY_ARCHITECTURE)
:param msbuild_verbosity: verbosity level for MSBuild (in case of Visual Studio generator)
:param cmake_program: Path to the custom cmake executable
"""
Expand Down
11 changes: 9 additions & 2 deletions conans/client/cache/editable.py
Expand Up @@ -6,7 +6,7 @@
from conans.util.files import load, save


EDITABLE_PACKAGES_FILE = 'editable_packages'
EDITABLE_PACKAGES_FILE = 'editable_packages.json'


class EditablePackages(object):
Expand All @@ -21,6 +21,10 @@ def __init__(self, cache_folder):
else:
self._edited_refs = {} # {ref: {"path": path, "layout": layout}}

@property
def edited_refs(self):
return self._edited_refs

def save(self):
d = {str(ref): d for ref, d in self._edited_refs.items()}
save(self._edited_file, json.dumps(d))
Expand All @@ -29,7 +33,7 @@ def get(self, ref):
ref = ref.copy_clear_rev()
return self._edited_refs.get(ref)

def link(self, ref, path, layout):
def add(self, ref, path, layout):
assert isinstance(ref, ConanFileReference)
ref = ref.copy_clear_rev()
self._edited_refs[ref] = {"path": path, "layout": layout}
Expand All @@ -42,3 +46,6 @@ def remove(self, ref):
self.save()
return True
return False

def override(self, workspace_edited):
self._edited_refs = workspace_edited
2 changes: 1 addition & 1 deletion conans/client/cmd/export_pkg.py
Expand Up @@ -20,7 +20,7 @@ def export_pkg(cache, graph_manager, hook_manager, recorder, output,
# to be downloaded from remotes
deps_graph, _ = graph_manager.load_graph(ref, None, graph_info=graph_info, build_mode=[ref.name],
check_updates=False, update=False,
remote_name=None, recorder=recorder, workspace=None)
remote_name=None, recorder=recorder)
# this is a bit tricky, but works. The root (virtual), has only 1 neighbor,
# which is the exported pkg
nodes = deps_graph.root.neighbors()
Expand Down
99 changes: 62 additions & 37 deletions conans/client/command.py
Expand Up @@ -392,12 +392,13 @@ def install(self, *args):
raise ConanException("A full reference was provided as first argument, second "
"argument not allowed")

manifest_interactive = args.manifests_interactive
info = self._conan.install_reference(ref, settings=args.settings,
options=args.options,
env=args.env,
remote_name=args.remote,
verify=args.verify, manifests=args.manifests,
manifests_interactive=args.manifests_interactive,
manifests_interactive=manifest_interactive,
build=args.build, profile_names=args.profile,
update=args.update,
generators=args.generator,
Expand Down Expand Up @@ -636,8 +637,8 @@ def build(self, *args):
parser.add_argument("-if", "--install-folder", action=OnceArgument,
help=_INSTALL_FOLDER_HELP)
parser.add_argument("-pf", "--package-folder", action=OnceArgument,
help="Directory to install the package (when the build system or build() "
"method does it). Defaulted to the '{build_folder}/package' folder"
help="Directory to install the package (when the build system or build()"
" method does it). Defaulted to the '{build_folder}/package' folder"
". A relative path can be specified, relative to the current "
" folder. Also an absolute path is allowed.")
parser.add_argument("-sf", "--source-folder", action=OnceArgument, help=_SOURCE_FOLDER_HELP)
Expand Down Expand Up @@ -840,7 +841,7 @@ def remove(self, *args):
parser.add_argument("-l", "--locks", default=False, action="store_true",
help="Remove locks")
parser.add_argument("-o", "--outdated", default=False, action="store_true",
help="Remove only outdated from recipe packages. " \
help="Remove only outdated from recipe packages. "
"This flag can only be used with a reference")
parser.add_argument('-p', '--packages', nargs="*", action=Extender,
help="Select package to remove specifying the package ID")
Expand Down Expand Up @@ -972,7 +973,8 @@ def user(self, *args):
name = args.name
password = args.password
if not password:
name, password = self._user_io.request_login(remote_name=remote_name, username=name)
name, password = self._user_io.request_login(remote_name=remote_name,
username=name)
remote_name, prev_user, user = self._conan.authenticate(name,
remote_name=remote_name,
password=password)
Expand All @@ -998,7 +1000,7 @@ def search(self, *args):
parser = argparse.ArgumentParser(description=self.search.__doc__, prog="conan search")
parser.add_argument('pattern_or_reference', nargs='?', help=_PATTERN_OR_REFERENCE_HELP)
parser.add_argument('-o', '--outdated', default=False, action='store_true',
help="Show only outdated from recipe packages. " \
help="Show only outdated from recipe packages. "
"This flag can only be used with a reference")
parser.add_argument('-q', '--query', default=None, action=OnceArgument, help=_QUERY_HELP)
parser.add_argument('-r', '--remote', action=OnceArgument,
Expand Down Expand Up @@ -1178,7 +1180,8 @@ def remote(self, *args):
# create the parser for the "a" command
parser_list = subparsers.add_parser('list', help='List current remotes')
parser_list.add_argument("-raw", "--raw", action='store_true', default=False,
help='Raw format. Valid for "remotes.txt" file for "conan config install"')
help='Raw format. Valid for "remotes.txt" file for '
'"conan config install"')
parser_add = subparsers.add_parser('add', help='Add a remote')
parser_add.add_argument('remote', help='Name of the remote')
parser_add.add_argument('url', help='URL of the remote')
Expand Down Expand Up @@ -1216,7 +1219,6 @@ def remote(self, *args):
parser_pupd.add_argument('reference', help='Package recipe reference')
parser_pupd.add_argument('remote', help='Name of the remote')


list_pref = subparsers.add_parser('list_pref', help='List the package binaries and '
'its associated remotes')
list_pref.add_argument('reference', help='Package recipe reference')
Expand All @@ -1227,7 +1229,7 @@ def remote(self, *args):
add_pref.add_argument('remote', help='Name of the remote')

remove_pref = subparsers.add_parser('remove_pref', help="Dissociate a package's reference "
"and its remote")
"and its remote")
remove_pref.add_argument('package_reference', help='Binary package reference')

update_pref = subparsers.add_parser('update_pref', help="Update the remote associated with "
Expand Down Expand Up @@ -1405,50 +1407,73 @@ def alias(self, *args):

self._conan.export_alias(args.reference, args.target)

def link(self, *args):
""" Links a conan reference (e.g lib/1.0@conan/stable) with a local folder path.

def workspace(self, *args):
""" command to manage workspaces
"""
parser = argparse.ArgumentParser(description=self.link.__doc__,
prog="conan link")
parser.add_argument('target', help='Path to the package folder in the user workspace',
nargs='?',)
parser.add_argument('reference', help='Reference to link. e.g.: mylib/1.X@user/channel')
parser.add_argument("--remove", action='store_true', default=False,
help='Remove linked reference (target not required)')
parser.add_argument("-l", "--layout",
help='Relative or absolute path to a file containing the layout.'
' Relative paths will be resolved first relative to current dir, '
'then to local cache "layouts" folder')
parser = argparse.ArgumentParser(description=self.workspace.__doc__,
prog="conan workspace")
subparsers = parser.add_subparsers(dest='subcommand', help='sub-command help')

install_parser = subparsers.add_parser('install', help='same as a "conan install" command '
'but using the workspace data from the file')
install_parser.add_argument('path', help='path to workspace definition file')
_add_common_install_arguments(install_parser, build_help=_help_build_policies)

args = parser.parse_args(*args)
self._warn_python2()

# Args sanity check
if args.remove and args.target:
raise ConanException("Do not provide the 'target' argument for removal")
if args.subcommand == "install":
self._conan.workspace_install(args.path, args.settings, args.options, args.env,
args.remote, args.build,
args.profile, args.update)

if not args.remove and not args.target:
raise ConanException("Argument 'target' is required to link a reference")
def editable(self, *args):
""" Manage editable packages
"""
parser = argparse.ArgumentParser(description=self.editable.__doc__,
prog="conan editable")
subparsers = parser.add_subparsers(dest='subcommand', help='sub-command help')

if not args.remove:
self._conan.link(args.target, args.reference, args.layout, cwd=os.getcwd())
self._outputer.writeln("Reference '{}' linked to directory "
"'{}'".format(args.reference, os.path.dirname(args.target)))
else:
ret = self._conan.unlink(args.reference)
add_parser = subparsers.add_parser('add', help='Put a package in editable mode')
add_parser.add_argument('path', help='Path to the package folder in the user workspace')
add_parser.add_argument('reference', help='Package reference e.g.: mylib/1.X@user/channel')
add_parser.add_argument("-l", "--layout",
help='Relative or absolute path to a file containing the layout.'
' Relative paths will be resolved first relative to current dir, '
'then to local cache "layouts" folder')

remove_parser = subparsers.add_parser('remove', help='Disable editable mode for a package')
remove_parser.add_argument('reference',
help='Package reference e.g.: mylib/1.X@user/channel')

subparsers.add_parser('list', help='List packages in editable mode')

args = parser.parse_args(*args)
self._warn_python2()

if args.subcommand == "add":
self._conan.editable_add(args.path, args.reference, args.layout, cwd=os.getcwd())
self._user_io.out.success("Reference '{}' in editable mode".format(args.reference))
elif args.subcommand == "remove":
ret = self._conan.editable_remove(args.reference)
if ret:
self._outputer.writeln("Removed linkage for reference '{}'".format(args.reference))
self._user_io.out.success("Removed editable mode for reference "
"'{}'".format(args.reference))
else:
self._user_io.out.warn("Reference '{}' was not installed "
"as editable".format(args.reference))
elif args.subcommand == "list":
for k, v in self._conan.editable_list().items():
self._user_io.out.info("%s" % k)
self._user_io.out.writeln(" Path: %s" % v["path"])
self._user_io.out.writeln(" Layout: %s" % v["layout"])

def _show_help(self):
"""Prints a summary of all commands
"""
grps = [("Consumer commands", ("install", "config", "get", "info", "search")),
("Creator commands", ("new", "create", "upload", "export", "export-pkg", "test")),
("Package development commands", ("source", "build", "package", "link")),
("Package development commands", ("source", "build", "package", "editable",
"workspace")),
("Misc commands", ("profile", "remote", "user", "imports", "copy", "remove",
"alias", "download", "inspect", "help"))]

Expand Down