diff --git a/.buildinfo b/.buildinfo index f6f6351e..1df8fadf 100644 --- a/.buildinfo +++ b/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 54e3c41ee399a53cbbd539e0b5b1070a +config: 851d89774707ad51b2c12510a4226ab6 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.doctrees/composer.doctree b/.doctrees/composer.doctree index 17e8da96..5d4c884b 100644 Binary files a/.doctrees/composer.doctree and b/.doctrees/composer.doctree differ diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle index b1c97a5b..9ab75afe 100644 Binary files a/.doctrees/environment.pickle and b/.doctrees/environment.pickle differ diff --git a/.doctrees/livemedia-creator.doctree b/.doctrees/livemedia-creator.doctree index 7b09a96a..36525a07 100644 Binary files a/.doctrees/livemedia-creator.doctree and b/.doctrees/livemedia-creator.doctree differ diff --git a/.doctrees/lorax.doctree b/.doctrees/lorax.doctree index afc4b631..4ba1f7a8 100644 Binary files a/.doctrees/lorax.doctree and b/.doctrees/lorax.doctree differ diff --git a/.doctrees/pylorax.doctree b/.doctrees/pylorax.doctree index c7fba21b..d1e2611f 100644 Binary files a/.doctrees/pylorax.doctree and b/.doctrees/pylorax.doctree differ diff --git a/_modules/composer/cli.html b/_modules/composer/cli.html index ec508961..02848856 100644 --- a/_modules/composer/cli.html +++ b/_modules/composer/cli.html @@ -8,7 +8,7 @@ - composer.cli — Lorax 32.4 documentation + composer.cli — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/composer/cli/blueprints.html b/_modules/composer/cli/blueprints.html index 54b41d6c..e6b7a3cc 100644 --- a/_modules/composer/cli/blueprints.html +++ b/_modules/composer/cli/blueprints.html @@ -8,7 +8,7 @@ - composer.cli.blueprints — Lorax 32.4 documentation + composer.cli.blueprints — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/composer/cli/cmdline.html b/_modules/composer/cli/cmdline.html index a5965ef2..1ccdeab6 100644 --- a/_modules/composer/cli/cmdline.html +++ b/_modules/composer/cli/cmdline.html @@ -8,7 +8,7 @@ - composer.cli.cmdline — Lorax 32.4 documentation + composer.cli.cmdline — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/composer/cli/compose.html b/_modules/composer/cli/compose.html index ec801894..bde0b68f 100644 --- a/_modules/composer/cli/compose.html +++ b/_modules/composer/cli/compose.html @@ -8,7 +8,7 @@ - composer.cli.compose — Lorax 32.4 documentation + composer.cli.compose — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/composer/cli/modules.html b/_modules/composer/cli/modules.html index 6bd3c9ea..e32fdea2 100644 --- a/_modules/composer/cli/modules.html +++ b/_modules/composer/cli/modules.html @@ -8,7 +8,7 @@ - composer.cli.modules — Lorax 32.4 documentation + composer.cli.modules — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/composer/cli/projects.html b/_modules/composer/cli/projects.html index 502630cd..c0126172 100644 --- a/_modules/composer/cli/projects.html +++ b/_modules/composer/cli/projects.html @@ -8,7 +8,7 @@ - composer.cli.projects — Lorax 32.4 documentation + composer.cli.projects — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/composer/cli/providers.html b/_modules/composer/cli/providers.html index 63b07eee..7e11340e 100644 --- a/_modules/composer/cli/providers.html +++ b/_modules/composer/cli/providers.html @@ -8,7 +8,7 @@ - composer.cli.providers — Lorax 32.4 documentation + composer.cli.providers — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/composer/cli/sources.html b/_modules/composer/cli/sources.html index 4df3e62d..9211e4bd 100644 --- a/_modules/composer/cli/sources.html +++ b/_modules/composer/cli/sources.html @@ -8,7 +8,7 @@ - composer.cli.sources — Lorax 32.4 documentation + composer.cli.sources — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/composer/cli/status.html b/_modules/composer/cli/status.html index 4eac5675..e92ae727 100644 --- a/_modules/composer/cli/status.html +++ b/_modules/composer/cli/status.html @@ -8,7 +8,7 @@ - composer.cli.status — Lorax 32.4 documentation + composer.cli.status — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/composer/cli/upload.html b/_modules/composer/cli/upload.html index 94808ce3..06c82ec3 100644 --- a/_modules/composer/cli/upload.html +++ b/_modules/composer/cli/upload.html @@ -8,7 +8,7 @@ - composer.cli.upload — Lorax 32.4 documentation + composer.cli.upload — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/composer/cli/utilities.html b/_modules/composer/cli/utilities.html index 92a903df..0c1812c4 100644 --- a/_modules/composer/cli/utilities.html +++ b/_modules/composer/cli/utilities.html @@ -8,7 +8,7 @@ - composer.cli.utilities — Lorax 32.4 documentation + composer.cli.utilities — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/composer/http_client.html b/_modules/composer/http_client.html index 3bc69e96..af83487f 100644 --- a/_modules/composer/http_client.html +++ b/_modules/composer/http_client.html @@ -8,7 +8,7 @@ - composer.http_client — Lorax 32.4 documentation + composer.http_client — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
@@ -283,7 +283,7 @@ r_unlimited = http.request("GET", unlimited_url) return json.loads(r_unlimited.data.decode('utf-8')) -
[docs]def delete_url_json(socket_path, url): +
[docs]def delete_url_json(socket_path, url, timeout=120): """Send a DELETE request to the url and return JSON response :param socket_path: Path to the Unix socket to use for API communication @@ -293,7 +293,7 @@ :returns: The json response from the server :rtype: dict """ - http = UnixHTTPConnectionPool(socket_path) + http = UnixHTTPConnectionPool(socket_path, timeout=timeout) r = http.request("DELETE", url) return json.loads(r.data.decode("utf-8"))
diff --git a/_modules/composer/unix_socket.html b/_modules/composer/unix_socket.html index d69483dc..9270d230 100644 --- a/_modules/composer/unix_socket.html +++ b/_modules/composer/unix_socket.html @@ -8,7 +8,7 @@ - composer.unix_socket — Lorax 32.4 documentation + composer.unix_socket — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/index.html b/_modules/index.html index ea6bc240..e429cbcb 100644 --- a/_modules/index.html +++ b/_modules/index.html @@ -8,7 +8,7 @@ - Overview: module code — Lorax 32.4 documentation + Overview: module code — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/lifted/config.html b/_modules/lifted/config.html index 0b2fb925..7b9e98f9 100644 --- a/_modules/lifted/config.html +++ b/_modules/lifted/config.html @@ -8,7 +8,7 @@ - lifted.config — Lorax 32.4 documentation + lifted.config — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/lifted/providers.html b/_modules/lifted/providers.html index 4469d1df..0794a2b6 100644 --- a/_modules/lifted/providers.html +++ b/_modules/lifted/providers.html @@ -8,7 +8,7 @@ - lifted.providers — Lorax 32.4 documentation + lifted.providers — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/lifted/queue.html b/_modules/lifted/queue.html index 80497002..6c1efb56 100644 --- a/_modules/lifted/queue.html +++ b/_modules/lifted/queue.html @@ -8,7 +8,7 @@ - lifted.queue — Lorax 32.4 documentation + lifted.queue — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/lifted/upload.html b/_modules/lifted/upload.html index f9453208..54433f9e 100644 --- a/_modules/lifted/upload.html +++ b/_modules/lifted/upload.html @@ -8,7 +8,7 @@ - lifted.upload — Lorax 32.4 documentation + lifted.upload — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax.html b/_modules/pylorax.html index 5b825a6e..34be9b6e 100644 --- a/_modules/pylorax.html +++ b/_modules/pylorax.html @@ -8,7 +8,7 @@ - pylorax — Lorax 32.4 documentation + pylorax — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/api/bisect.html b/_modules/pylorax/api/bisect.html index 38a153ae..d6d6d30f 100644 --- a/_modules/pylorax/api/bisect.html +++ b/_modules/pylorax/api/bisect.html @@ -8,7 +8,7 @@ - pylorax.api.bisect — Lorax 32.4 documentation + pylorax.api.bisect — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/api/checkparams.html b/_modules/pylorax/api/checkparams.html index 076cc7a5..9a331193 100644 --- a/_modules/pylorax/api/checkparams.html +++ b/_modules/pylorax/api/checkparams.html @@ -8,7 +8,7 @@ - pylorax.api.checkparams — Lorax 32.4 documentation + pylorax.api.checkparams — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/api/cmdline.html b/_modules/pylorax/api/cmdline.html index efc1e9f8..f5cad2f8 100644 --- a/_modules/pylorax/api/cmdline.html +++ b/_modules/pylorax/api/cmdline.html @@ -8,7 +8,7 @@ - pylorax.api.cmdline — Lorax 32.4 documentation + pylorax.api.cmdline — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/api/compose.html b/_modules/pylorax/api/compose.html index 85d37c3e..6dec6a92 100644 --- a/_modules/pylorax/api/compose.html +++ b/_modules/pylorax/api/compose.html @@ -8,7 +8,7 @@ - pylorax.api.compose — Lorax 32.4 documentation + pylorax.api.compose — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
@@ -1036,7 +1036,7 @@ disable_map = { "arm": ["alibaba", "ami", "google", "hyper-v", "vhd", "vmdk"], "armhfp": ["alibaba", "ami", "google", "hyper-v", "vhd", "vmdk"], - "aarch64": ["alibaba", "ami", "google", "hyper-v", "vhd", "vmdk"], + "aarch64": ["alibaba", "google", "hyper-v", "vhd", "vmdk"], "ppc": ["alibaba", "ami", "google", "hyper-v", "vhd", "vmdk"], "ppc64": ["alibaba", "ami", "google", "hyper-v", "vhd", "vmdk"], "ppc64le": ["alibaba", "ami", "google", "hyper-v", "vhd", "vmdk"], diff --git a/_modules/pylorax/api/config.html b/_modules/pylorax/api/config.html index 43b9b602..269c5e38 100644 --- a/_modules/pylorax/api/config.html +++ b/_modules/pylorax/api/config.html @@ -8,7 +8,7 @@ - pylorax.api.config — Lorax 32.4 documentation + pylorax.api.config — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/api/dnfbase.html b/_modules/pylorax/api/dnfbase.html index f5f4a45a..7c33b8d7 100644 --- a/_modules/pylorax/api/dnfbase.html +++ b/_modules/pylorax/api/dnfbase.html @@ -8,7 +8,7 @@ - pylorax.api.dnfbase — Lorax 32.4 documentation + pylorax.api.dnfbase — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/api/flask_blueprint.html b/_modules/pylorax/api/flask_blueprint.html index 2f8806be..4ae6d28c 100644 --- a/_modules/pylorax/api/flask_blueprint.html +++ b/_modules/pylorax/api/flask_blueprint.html @@ -8,7 +8,7 @@ - pylorax.api.flask_blueprint — Lorax 32.4 documentation + pylorax.api.flask_blueprint — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/api/gitrpm.html b/_modules/pylorax/api/gitrpm.html index de939868..87146c13 100644 --- a/_modules/pylorax/api/gitrpm.html +++ b/_modules/pylorax/api/gitrpm.html @@ -8,7 +8,7 @@ - pylorax.api.gitrpm — Lorax 32.4 documentation + pylorax.api.gitrpm — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/api/projects.html b/_modules/pylorax/api/projects.html index 28ca1542..2f230cf5 100644 --- a/_modules/pylorax/api/projects.html +++ b/_modules/pylorax/api/projects.html @@ -8,7 +8,7 @@ - pylorax.api.projects — Lorax 32.4 documentation + pylorax.api.projects — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/api/queue.html b/_modules/pylorax/api/queue.html index 94b28e82..3fbbf649 100644 --- a/_modules/pylorax/api/queue.html +++ b/_modules/pylorax/api/queue.html @@ -8,7 +8,7 @@ - pylorax.api.queue — Lorax 32.4 documentation + pylorax.api.queue — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
@@ -395,7 +395,9 @@ cfg_dict["lorax_templates"] = find_templates(cfg.share_dir) cfg_dict["tmp"] = cfg.tmp - cfg_dict["dracut_args"] = None # Use default args for dracut + # Use default args for dracut + cfg_dict["dracut_conf"] = None + cfg_dict["dracut_args"] = None # TODO How to support other arches? cfg_dict["arch"] = None diff --git a/_modules/pylorax/api/recipes.html b/_modules/pylorax/api/recipes.html index bdc0f39f..941a5906 100644 --- a/_modules/pylorax/api/recipes.html +++ b/_modules/pylorax/api/recipes.html @@ -8,7 +8,7 @@ - pylorax.api.recipes — Lorax 32.4 documentation + pylorax.api.recipes — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
@@ -1203,11 +1203,9 @@ datetime = sig.get_time() # XXX What do we do with timezone? _timezone = sig.get_time_zone() - timeval = GLib.TimeVal() - ok = datetime.to_timeval(timeval) - if not ok: + time_str = datetime.format_iso8601() + if not time_str: raise CommitTimeValError - time_str = timeval.to_iso8601() return CommitDetails(commit_str, time_str, message, revision)
diff --git a/_modules/pylorax/api/server.html b/_modules/pylorax/api/server.html index 441fd8f4..25ad3883 100644 --- a/_modules/pylorax/api/server.html +++ b/_modules/pylorax/api/server.html @@ -8,7 +8,7 @@ - pylorax.api.server — Lorax 32.4 documentation + pylorax.api.server — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/api/timestamp.html b/_modules/pylorax/api/timestamp.html index 3b7621f1..8a0551a9 100644 --- a/_modules/pylorax/api/timestamp.html +++ b/_modules/pylorax/api/timestamp.html @@ -8,7 +8,7 @@ - pylorax.api.timestamp — Lorax 32.4 documentation + pylorax.api.timestamp — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/api/toml.html b/_modules/pylorax/api/toml.html index c9b1697c..659b3d75 100644 --- a/_modules/pylorax/api/toml.html +++ b/_modules/pylorax/api/toml.html @@ -8,7 +8,7 @@ - pylorax.api.toml — Lorax 32.4 documentation + pylorax.api.toml — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/api/utils.html b/_modules/pylorax/api/utils.html index f59629d9..e2a2ffbe 100644 --- a/_modules/pylorax/api/utils.html +++ b/_modules/pylorax/api/utils.html @@ -8,7 +8,7 @@ - pylorax.api.utils — Lorax 32.4 documentation + pylorax.api.utils — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/api/v0.html b/_modules/pylorax/api/v0.html index 99c8a53c..39e2f338 100644 --- a/_modules/pylorax/api/v0.html +++ b/_modules/pylorax/api/v0.html @@ -8,7 +8,7 @@ - pylorax.api.v0 — Lorax 32.4 documentation + pylorax.api.v0 — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/api/v1.html b/_modules/pylorax/api/v1.html index 572ca285..8663de6d 100644 --- a/_modules/pylorax/api/v1.html +++ b/_modules/pylorax/api/v1.html @@ -8,7 +8,7 @@ - pylorax.api.v1 — Lorax 32.4 documentation + pylorax.api.v1 — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/api/workspace.html b/_modules/pylorax/api/workspace.html index 299befdf..32779f7a 100644 --- a/_modules/pylorax/api/workspace.html +++ b/_modules/pylorax/api/workspace.html @@ -8,7 +8,7 @@ - pylorax.api.workspace — Lorax 32.4 documentation + pylorax.api.workspace — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/base.html b/_modules/pylorax/base.html index d4e26435..742c6d24 100644 --- a/_modules/pylorax/base.html +++ b/_modules/pylorax/base.html @@ -8,7 +8,7 @@ - pylorax.base — Lorax 32.4 documentation + pylorax.base — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/buildstamp.html b/_modules/pylorax/buildstamp.html index d6f43a3c..074de494 100644 --- a/_modules/pylorax/buildstamp.html +++ b/_modules/pylorax/buildstamp.html @@ -8,7 +8,7 @@ - pylorax.buildstamp — Lorax 32.4 documentation + pylorax.buildstamp — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/cmdline.html b/_modules/pylorax/cmdline.html index c4623679..43530657 100644 --- a/_modules/pylorax/cmdline.html +++ b/_modules/pylorax/cmdline.html @@ -8,7 +8,7 @@ - pylorax.cmdline — Lorax 32.4 documentation + pylorax.cmdline — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
@@ -272,12 +272,15 @@ help="Use a plain squashfs filesystem for the runtime.") # dracut arguments - dracut_group = parser.add_argument_group("dracut arguments") + dracut_group = parser.add_argument_group("dracut arguments: (default: %s)" % dracut_default) + dracut_group.add_argument("--dracut-conf", + help="Path to a dracut.conf file to use instead of the " + "default arguments. See the dracut.conf(5) manpage.") dracut_group.add_argument("--dracut-arg", action="append", dest="dracut_args", help="Argument to pass to dracut when " "rebuilding the initramfs. Pass this " "once for each argument. NOTE: this " - "overrides the default. (default: %s)" % dracut_default) + "overrides the defaults.") # add the show version option parser.add_argument("-V", help="show program's version number and exit", @@ -427,12 +430,15 @@ help="RNG device for QEMU (none for no RNG)") # dracut arguments - dracut_group = parser.add_argument_group("dracut arguments") + dracut_group = parser.add_argument_group("dracut arguments: (default: %s)" % dracut_default) + dracut_group.add_argument("--dracut-conf", + help="Path to a dracut.conf file to use instead of the " + "default arguments. See the dracut.conf(5) manpage.") dracut_group.add_argument("--dracut-arg", action="append", dest="dracut_args", help="Argument to pass to dracut when " "rebuilding the initramfs. Pass this " "once for each argument. NOTE: this " - "overrides the default. (default: %s)" % dracut_default) + "overrides the defaults.") # pxe to live arguments pxelive_group = parser.add_argument_group("pxe to live arguments") diff --git a/_modules/pylorax/creator.html b/_modules/pylorax/creator.html index 2621432c..5ca37b56 100644 --- a/_modules/pylorax/creator.html +++ b/_modules/pylorax/creator.html @@ -8,7 +8,7 @@ - pylorax.creator — Lorax 32.4 documentation + pylorax.creator — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
@@ -206,7 +206,7 @@ from pylorax.sysutils import joinpaths, remove -# Default parameters for rebuilding initramfs, override with --dracut-args +# Default parameters for rebuilding initramfs, override with --dracut-arg or --dracut-conf DRACUT_DEFAULT = ["--xz", "--add", "livenet dmsquash-live dmsquash-live-ntfs convertfs pollcdrom qemu qemu-net", "--omit", "plymouth", "--no-hostonly", "--debug", "--no-early-microcode"] @@ -290,6 +290,21 @@ compressargs = [] return (compression, compressargs) +
[docs]def dracut_args(opts): + """Return a list of the args to pass to dracut + + Return the default argument list unless one of the dracut cmdline arguments + has been used. + """ + if opts.dracut_conf: + return ["--conf", opts.dracut_conf] + elif opts.dracut_args: + args = [] + for arg in opts.dracut_args: + args += arg.split(" ", 1) + return args + else: + return DRACUT_DEFAULT
[docs]def make_appliance(disk_img, name, template, outfile, networks=None, ram=1024, vcpus=1, arch=None, title="Linux", project="Linux", @@ -382,15 +397,10 @@ :param str sys_root_dir: Path to root of the system :param str results_dir: Path of directory for storing results """ - if not opts.dracut_args: - dracut_args = DRACUT_DEFAULT - else: - dracut_args = [] - for arg in opts.dracut_args: - dracut_args += arg.split(" ", 1) - log.info("dracut args = %s", dracut_args) + # cmdline dracut args override the defaults, but need to be parsed + log.info("dracut args = %s", dracut_args(opts)) - dracut = ["dracut", "--nomdadmconf", "--nolvmconf"] + dracut_args + dracut = ["dracut", "--nomdadmconf", "--nolvmconf"] + dracut_args(opts) kdir = "boot" if opts.ostree: @@ -526,14 +536,8 @@ templatedir=joinpaths(opts.lorax_templates,"live/"), extra_boot_args=opts.extra_boot_args) log.info("Rebuilding initrds") - if not opts.dracut_args: - dracut_args = DRACUT_DEFAULT - else: - dracut_args = [] - for arg in opts.dracut_args: - dracut_args += arg.split(" ", 1) - log.info("dracut args = %s", dracut_args) - tb.rebuild_initrds(add_args=dracut_args) + log.info("dracut args = %s", dracut_args(opts)) + tb.rebuild_initrds(add_args=dracut_args(opts)) log.info("Building boot.iso") tb.build() diff --git a/_modules/pylorax/decorators.html b/_modules/pylorax/decorators.html index 5b8357bd..9db05ff5 100644 --- a/_modules/pylorax/decorators.html +++ b/_modules/pylorax/decorators.html @@ -8,7 +8,7 @@ - pylorax.decorators — Lorax 32.4 documentation + pylorax.decorators — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/discinfo.html b/_modules/pylorax/discinfo.html index da5ae7f2..70850a4b 100644 --- a/_modules/pylorax/discinfo.html +++ b/_modules/pylorax/discinfo.html @@ -8,7 +8,7 @@ - pylorax.discinfo — Lorax 32.4 documentation + pylorax.discinfo — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/dnfbase.html b/_modules/pylorax/dnfbase.html index 011c4734..f2d9d399 100644 --- a/_modules/pylorax/dnfbase.html +++ b/_modules/pylorax/dnfbase.html @@ -8,7 +8,7 @@ - pylorax.dnfbase — Lorax 32.4 documentation + pylorax.dnfbase — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/dnfhelper.html b/_modules/pylorax/dnfhelper.html index d1e0bf40..6fedd00d 100644 --- a/_modules/pylorax/dnfhelper.html +++ b/_modules/pylorax/dnfhelper.html @@ -8,7 +8,7 @@ - pylorax.dnfhelper — Lorax 32.4 documentation + pylorax.dnfhelper — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/executils.html b/_modules/pylorax/executils.html index 49c91979..57330ffa 100644 --- a/_modules/pylorax/executils.html +++ b/_modules/pylorax/executils.html @@ -8,7 +8,7 @@ - pylorax.executils — Lorax 32.4 documentation + pylorax.executils — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
@@ -486,7 +486,7 @@ stderr = subprocess.STDOUT try: - proc = startProgram(argv, root=root, stdin=stdin, stdout=subprocess.PIPE, stderr=stderr, bufsize=1, + proc = startProgram(argv, root=root, stdin=stdin, stdout=subprocess.PIPE, stderr=stderr, env_prune=env_prune, env_add=env_add, reset_handlers=reset_handlers, reset_lang=reset_lang) except OSError as e: with program_log_lock: diff --git a/_modules/pylorax/imgutils.html b/_modules/pylorax/imgutils.html index 23666113..6f112f88 100644 --- a/_modules/pylorax/imgutils.html +++ b/_modules/pylorax/imgutils.html @@ -8,7 +8,7 @@ - pylorax.imgutils — Lorax 32.4 documentation + pylorax.imgutils — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/installer.html b/_modules/pylorax/installer.html index 43894a61..46bcd144 100644 --- a/_modules/pylorax/installer.html +++ b/_modules/pylorax/installer.html @@ -8,7 +8,7 @@ - pylorax.installer — Lorax 32.4 documentation + pylorax.installer — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
@@ -467,7 +467,17 @@ Attempts to cleanup may also fail. Catch these and continue trying the other mountpoints. + + Anaconda may also leave /run/anaconda.pid behind, clean that up as well. """ + # Anaconda may not clean up its /var/run/anaconda.pid file + # Make sure the process is really finished (it should be, since it was started from a subprocess call) + # and then remove the pid file. + if os.path.exists("/var/run/anaconda.pid"): + # lorax-composer runs anaconda using unshare so the pid is always 1 + if open("/var/run/anaconda.pid").read().strip() == "1": + os.unlink("/var/run/anaconda.pid") + rc = True dirinstall_path = os.path.abspath(dirinstall_path) # unmount filesystems @@ -547,12 +557,14 @@ cancel_funcs.append(cancel_func) # Make sure anaconda has the right product and release + # Preload libgomp.so.1 to workaround rhbz#1722181 log.info("Running anaconda.") try: unshare_args = [ "--pid", "--kill-child", "--mount", "--propagation", "unchanged", "anaconda" ] + args for line in execReadlines("unshare", unshare_args, reset_lang=False, env_add={"ANACONDA_PRODUCTNAME": opts.project, - "ANACONDA_PRODUCTVERSION": opts.releasever}, + "ANACONDA_PRODUCTVERSION": opts.releasever, + "LD_PRELOAD": "libgomp.so.1"}, callback=lambda p: not novirt_cancel_check(cancel_funcs, p)): log.info(line) diff --git a/_modules/pylorax/ltmpl.html b/_modules/pylorax/ltmpl.html index c7758581..c9a3be45 100644 --- a/_modules/pylorax/ltmpl.html +++ b/_modules/pylorax/ltmpl.html @@ -8,7 +8,7 @@ - pylorax.ltmpl — Lorax 32.4 documentation + pylorax.ltmpl — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
@@ -198,7 +198,7 @@ import sys, traceback import struct import dnf -import collections +import collections.abc
[docs]class LoraxTemplate(object): def __init__(self, directories=None): @@ -322,7 +322,7 @@ try: # grab the method named in cmd and pass it the given arguments f = getattr(self, cmd, None) - if cmd[0] == '_' or cmd == 'run' or not isinstance(f, collections.Callable): + if cmd[0] == '_' or cmd == 'run' or not isinstance(f, collections.abc.Callable): raise ValueError("unknown command %s" % cmd) f(*args) except Exception: # pylint: disable=broad-except diff --git a/_modules/pylorax/monitor.html b/_modules/pylorax/monitor.html index e8269388..233bbcfe 100644 --- a/_modules/pylorax/monitor.html +++ b/_modules/pylorax/monitor.html @@ -8,7 +8,7 @@ - pylorax.monitor — Lorax 32.4 documentation + pylorax.monitor — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/mount.html b/_modules/pylorax/mount.html index dfe48197..899b3902 100644 --- a/_modules/pylorax/mount.html +++ b/_modules/pylorax/mount.html @@ -8,7 +8,7 @@ - pylorax.mount — Lorax 32.4 documentation + pylorax.mount — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/sysutils.html b/_modules/pylorax/sysutils.html index ec0cfe47..15c82d1d 100644 --- a/_modules/pylorax/sysutils.html +++ b/_modules/pylorax/sysutils.html @@ -8,7 +8,7 @@ - pylorax.sysutils — Lorax 32.4 documentation + pylorax.sysutils — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/treebuilder.html b/_modules/pylorax/treebuilder.html index dd5d1ef5..ce50b989 100644 --- a/_modules/pylorax/treebuilder.html +++ b/_modules/pylorax/treebuilder.html @@ -8,7 +8,7 @@ - pylorax.treebuilder — Lorax 32.4 documentation + pylorax.treebuilder — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_modules/pylorax/treeinfo.html b/_modules/pylorax/treeinfo.html index 9c8aa20f..c32eacb2 100644 --- a/_modules/pylorax/treeinfo.html +++ b/_modules/pylorax/treeinfo.html @@ -8,7 +8,7 @@ - pylorax.treeinfo — Lorax 32.4 documentation + pylorax.treeinfo — Lorax 32.5 documentation @@ -58,7 +58,7 @@
- 32.4 + 32.5
diff --git a/_static/basic.css b/_static/basic.css index c41d718e..ea6972d5 100644 --- a/_static/basic.css +++ b/_static/basic.css @@ -520,14 +520,15 @@ dl.citation > dd:after { } dl.field-list { - display: flex; - flex-wrap: wrap; + display: grid; + grid-template-columns: fit-content(30%) auto; } dl.field-list > dt { - flex-basis: 20%; font-weight: bold; word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; } dl.field-list > dt:after { @@ -535,8 +536,8 @@ dl.field-list > dt:after { } dl.field-list > dd { - flex-basis: 70%; - padding-left: 1em; + padding-left: 0.5em; + margin-top: 0em; margin-left: 0em; margin-bottom: 0em; } diff --git a/_static/documentation_options.js b/_static/documentation_options.js index 33703de6..43103ca7 100644 --- a/_static/documentation_options.js +++ b/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '32.4', + VERSION: '32.5', LANGUAGE: 'None', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', diff --git a/_static/jquery-3.1.0.js b/_static/jquery-3.1.0.js deleted file mode 100644 index f2fc2747..00000000 --- a/_static/jquery-3.1.0.js +++ /dev/null @@ -1,10074 +0,0 @@ -/*eslint-disable no-unused-vars*/ -/*! - * jQuery JavaScript Library v3.1.0 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2016-07-07T21:44Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var document = window.document; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var concat = arr.concat; - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - - - - function DOMEval( code, doc ) { - doc = doc || document; - - var script = doc.createElement( "script" ); - - script.text = code; - doc.head.appendChild( script ).parentNode.removeChild( script ); - } -/* global Symbol */ -// Defining this global in .eslintrc would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.1.0", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }, - - // Support: Android <=4.0 only - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num != null ? - - // Return just the one element from the set - ( num < 0 ? this[ num + this.length ] : this[ num ] ) : - - // Return all the elements in a clean array - slice.call( this ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = jQuery.isArray( copy ) ) ) ) { - - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray( src ) ? src : []; - - } else { - clone = src && jQuery.isPlainObject( src ) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isFunction: function( obj ) { - return jQuery.type( obj ) === "function"; - }, - - isArray: Array.isArray, - - isWindow: function( obj ) { - return obj != null && obj === obj.window; - }, - - isNumeric: function( obj ) { - - // As of jQuery 3.0, isNumeric is limited to - // strings and numbers (primitives or objects) - // that can be coerced to finite numbers (gh-2662) - var type = jQuery.type( obj ); - return ( type === "number" || type === "string" ) && - - // parseFloat NaNs numeric-cast false positives ("") - // ...but misinterprets leading-number strings, particularly hex literals ("0x...") - // subtraction forces infinities to NaN - !isNaN( obj - parseFloat( obj ) ); - }, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - - /* eslint-disable no-unused-vars */ - // See https://github.com/eslint/eslint/issues/6125 - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; - }, - - // Evaluates a script in a global context - globalEval: function( code ) { - DOMEval( code ); - }, - - // Convert dashed to camelCase; used by the css and data modules - // Support: IE <=9 - 11, Edge 12 - 13 - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // Support: Android <=4.0 only - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var tmp, args, proxy; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - now: Date.now, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = jQuery.type( obj ); - - if ( type === "function" || jQuery.isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.0 - * https://sizzlejs.com/ - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2016-01-04 - */ -(function( window ) { - -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - disabledAncestor = addCombinator( - function( elem ) { - return elem.disabled === true; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { - - // ID selector - if ( (m = match[1]) ) { - - // Document context - if ( nodeType === 9 ) { - if ( (elem = context.getElementById( m )) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && (elem = newContext.getElementById( m )) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( (m = match[3]) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !compilerCache[ selector + " " ] && - (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - - if ( nodeType !== 1 ) { - newContext = context; - newSelector = selector; - - // qSA looks outside Element context, which is not what we want - // Thanks to Andrew Dupont for this workaround technique - // Support: IE <=8 - // Exclude object elements - } else if ( context.nodeName.toLowerCase() !== "object" ) { - - // Capture the context ID, setting it first if necessary - if ( (nid = context.getAttribute( "id" )) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", (nid = expando) ); - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[i] = "#" + nid + " " + toSelector( groups[i] ); - } - newSelector = groups.join( "," ); - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - } - - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key + " " ] = value); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement("fieldset"); - - try { - return !!fn( el ); - } catch (e) { - return false; - } finally { - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - // Known :disabled false positives: - // IE: *[disabled]:not(button, input, select, textarea, optgroup, option, menuitem, fieldset) - // not IE: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Check form elements and option elements for explicit disabling - return "label" in elem && elem.disabled === disabled || - "form" in elem && elem.disabled === disabled || - - // Check non-disabled form elements for fieldset[disabled] ancestors - "form" in elem && elem.disabled === false && ( - // Support: IE6-11+ - // Ancestry is covered for us - elem.isDisabled === disabled || - - // Otherwise, assume any non-