aboutsummaryrefslogtreecommitdiff
booleans_evaluate: {
    options = {
        booleans: true,
        evaluate: true,
    }
    input: {
        console.log(typeof void 0 != "undefined");
        console.log(1 == 1, 1 === 1)
        console.log(1 != 1, 1 !== 1)
    }
    expect: {
        console.log(!1);
        console.log(!0, !0);
        console.log(!1, !1);
    }
    expect_stdout: true
}

booleans_global_defs: {
    options = {
        booleans: true,
        evaluate: true,
        global_defs: {
            A: true,
        },
    }
    input: {
        console.log(A == 1);
    }
    expect: {
        console.log(!0);
    }
}

condition_evaluate: {
    options = {
        booleans: true,
        dead_code: false,
        evaluate: true,
        loops: false,
    }
    input: {
        while (1 === 2);
        for (; 1 == true;);
        if (void 0 == null);
    }
    expect: {
        while (0);
        for (; 1;);
        if (1);
    }
}

if_else_empty: {
    options = {
        conditionals: true,
    }
    input: {
        if ({} ? a : b); else {}
    }
    expect: {
        ({}), a;
    }
}

label_if_break: {
    options = {
        conditionals: true,
        dead_code: true,
        evaluate: true,
        side_effects: true,
        unused: true,
    }
    input: {
        L: if (true) {
            a;
            break L;
        }
    }
    expect: {
        a;
    }
}

while_if_break: {
    options = {
        conditionals: true,
        loops: true,
        sequences: true,
    }
    input: {
        while (a) {
            if (b) if(c) d;
            if (e) break;
        }
    }
    expect: {
        for (; a && (b && c && d, !e););
    }
}

if_return: {
    options = {
        booleans: true,
        conditionals: true,
        if_return: true,
        passes: 2,
        sequences: true,
        side_effects: true,
    }
    input: {
        function f(w, x, y, z) {
            if (x) return;
            if (w) {
                if (y) return;
            } else if (z) return;
            if (x == y) return true;

            if (x) w();
            if (y) z();
            return true;
        }
    }
    expect: {
        function f(w, x, y, z) {
            if (!x) {
                if (w) {
                    if (y) return;
                } else if (z) return;
                return x == y || (x && w(), y && z()), !0;
            }
        }
    }
}
m/linux-container.scm?id=c27710859c3cb59c439571ddc56cf71c36a1c33c'>system: linux-container: Recommend guix container....* gnu/system/linux-container.scm (container-script)[script]: Recommend using 'guix container' to get a shell inside the running container. Efraim Flashner 2019-09-18linux-container: 'eval/container' correctly passes -L and -C flags....This fixes a type error. * gnu/system/linux-container.scm (eval/container): Use 'append-map', not 'map'. * tests/containers.scm ("eval/container, non-empty load path"): New test. Ludovic Courtès 2019-09-12linux-container: "run-container" scripts shows the container's PID....* gnu/build/linux-container.scm (call-with-container): Add #:process-spawned-hook and honor it. * gnu/system/linux-container.scm (container-script)[script]: Define 'explain' and pass it as #:process-spawned-hook'. Ludovic Courtès 2019-09-12linux-container: Exclude more services when sharing networking with the host....* gnu/system/linux-container.scm (containerized-operating-system)[useless-services]: Add more services to the list when SHARED-NETWORK? is true. Ludovic Courtès 2019-09-12file-systems: Add /var/run/nscd to '%network-file-mappings'....This allows containers created by "guix environment -CN" or by "guix system container -N" to talk to the host nscd. * gnu/system/file-systems.scm (%network-file-mappings): Add "/var/run/nscd". * gnu/build/shepherd.scm (default-mounts)[nscd-socket]: Remove. * gnu/system/linux-container.scm (container-script)[nscd-run-directory] [nscd-mapping, nscd-os, nscd-specs]: Remove. [script]: Filter out from SPECS bind-mounts where the device does not exist. * guix/scripts/environment.scm (launch-environment/container) [optional-mapping->fs]: New procedure. [mappings]: Remove %NETWORK-FILE-MAPPINGS. [file-systems]: Add %NETWORK-FILE-MAPPINGS here, filtered through 'optional-mapping->fs'. Ludovic Courtès 2019-07-19linux-container: Add 'eval/container'....* gnu/system/linux-container.scm (eval/container): New procedure. * tests/containers.scm ("eval/container, exit status") ("eval/container, writable user mapping"): New tests. Ludovic Courtès 2019-06-19linux-container: Remove networking service when network is shared with host....* gnu/system/linux-container.scm (dummy-networking-service-type): New variable. (containerized-operating-system): If network is shared with host, replace static-networking-service-type with dummy-networking-service-type. Arun Isaac 2019-05-25linux-container: Check if nscd run directory exists when container is run....* gnu/system/linux-container.scm (containerized-operating-system): (container-script): Check for existence of the host nscd run directory in the container script. This check should be run when the container is started, not when the container script is created. [network-mappings]: Delete variable. [nscd-run-directory, nscd-mapping]: New variables. Arun Isaac 2019-05-15linux-container: Compute essential services for THIS-OPERATING-SYSTEM....Previously, the 'essential-services' would correspond to the initial, non-containerized OS. Thus, all the file systems removed in 'container-essential-services' would actually still be there because the essential services would be computed on the non-containerized OS. This is a followup to 69cae3d3356a69b7fe69481338f760545995485e. * gnu/system/linux-container.scm (container-essential-services): Call 'operating-system-default-essential-services' to get the baseline services. (containerized-operating-system): Pass THIS-OPERATING-SYSTEM, not OS, to 'container-essential-services'. Add a dummy root file system to 'file-systems'. (container-script)[mountable-file-system?]: New procedure. Use it. Ludovic Courtès 2019-05-15linux-container: Do not add %CONTAINER-FILE-SYSTEMS to Docker image OSes....Previously, 'guix system docker-image' would end up providing an OS that would try to mount all of %CONTAINER-FILE-SYSTEMS as well as /gnu/store, which is bound to fail in unprivileged Docker. This patch makes it so that 'guix system container' still gets those file systems, but 'guix system docker-image' doesn't. * gnu/system/linux-container.scm (containerized-operating-system): Add #:extra-file-systems parameter and honor it. Do not include %STORE-MAPPING and SHARED-NETWORK-FILE-MAPPINGS. (container-script): Add %STORE-MAPPING and optionally NETWORK-MAPPINGS to MAPPINGS and pass #:extra-file-systems. Ludovic Courtès 2019-05-14linux-container: Support container network sharing....* gnu/system/linux-container.scm (container-essential-services): If network is to be shared with the host, remove network configuration files from etc service. (containerized-operating-system): If network is to be shared with the host, remove nscd service and map host's /var/run/nscd if it exists. (container-script): If network is to be shared with the host, do not create network namespace. * guix/scripts/system.scm (system-derivation-for-action): Add #:container-shared-network? argument. (perform-action): Add #:container-shared-network? argument. (show-help): Add "-N, --network" help information. (%options): Add network option. (process-action): Call perform-action with #container-shared-network? argument. * doc/guix.texi (Invoking guix system): Document the "-N, --network" option. Co-authored-by: Christopher Baines <mail@cbaines.net> Arun Isaac 2019-05-10linux-container: Improve filtering of unnecessary file systems....* gnu/system/linux-container.scm (containerized-operating-system)[user-file-systems]: Add trailing slash for the "/dev/" and "/sys/" prefixes. Ludovic Courtès 2019-04-23linux-container: Remove '%containerized-shepherd-service' hack....This hack worked around a defect in the Shepherd 0.5.0 and is no longer needed. * gnu/services/shepherd.scm (%containerized-shepherd-service): Remove. * gnu/system/linux-container.scm (container-essential-services): Don't use it. Ludovic Courtès 2019-03-25system: Add 'essential-services' field to <operating-system>....* gnu/system.scm (<operating-system>)[essential-services]: New field. (operating-system-directory-base-entries): Remove #:container? keyword and keep only the not-container branch. (essential-services): Likewise. (operating-system-services): Likewise, and call 'operating-system-essential-services' instead of 'essential-services'. (operating-system-activation-script): Remove #:container?. (operating-system-boot-script): Likewise. (operating-system-derivation): Likewise. * gnu/system/linux-container.scm (container-essential-services): New procedure. (containerized-operating-system): Use it and set the 'essential-services' field. (container-script): Remove call to 'operating-system-derivation'. * gnu/system/vm.scm (system-docker-image): Likewise. * doc/guix.texi (operating-system Reference): Document 'essential-services'. Ludovic Courtès 2019-03-13linux-container: 'containerized-operating-system' removes "useless" services....Fixes <https://bugs.gnu.org/34211>. Reported by Efraim Flashner <efraim@flashner.co.il>. * gnu/system/linux-container.scm (containerized-operating-system) [useless-services]: New variable. Add 'services' field. Ludovic Courtès 2017-02-03file-systems: Add 'file-system-mapping->bind-mount'....* gnu/system/file-systems.scm (file-system-mapping->bind-mount): New procedure. * gnu/system/linux-container.scm (mapping->file-system): Remove. (containerized-operating-system)[mapping->fs]: Use 'file-system-mapping->bind-mount' instead of 'mapping->file-system'. * guix/scripts/environment.scm (launch-environment/container): Likewise. Ludovic Courtès 2016-11-10container: Pass a list of <file-system> objects as things to mount....* gnu/build/linux-container.scm (mount-file-systems): 'mounts' is now a list of <file-system> objects instead of a list of lists ("specs"). Add call to 'file-system->spec' as the argument to 'mount-file-system'. (run-container, call-with-container): Adjust docstring accordingly. * gnu/system/file-systems.scm (spec->file-system): New procedure. * gnu/system/linux-container.scm (container-script)[script]: Call 'spec->file-system' inside gexp. * guix/scripts/environment.scm (launch-environment/container): Remove call to 'file-system->spec'. * tests/containers.scm ("call-with-container, mnt namespace") ("call-with-container, mnt namespace, wrong bind mount"): Pass a list of <file-system> objects. Ludovic Courtès 2016-11-10linux-container: Use 'source-module-closure' when generating the script....* gnu/system/linux-container.scm (container-script)[script]: Use 'source-module-closure' in 'with-imported-modules' form. Ludovic Courtès