<commit_before>{utillinux, fileSystems}:

let

  # !!! use XML
  mountPoints = map (fs: fs.mountPoint) fileSystems;
  devices = map (fs: fs.device) fileSystems;
  fsTypes = map (fs: if fs ? fsType then fs.fsType else "auto") fileSystems;
  optionss = map (fs: if fs ? options then fs.options else "defaults") fileSystems;

in 

{
  name = "filesystems";
  
  job = "
start on startup
start on new-devices

script
    mountPoints=(${toString mountPoints})  
    devices=(${toString devices})
    fsTypes=(${toString fsTypes})
    optionss=(${toString optionss})

    for ((n = 0; n < \${#mountPoints[*]}; n++)); do
        mountPoint=\${mountPoints[$n]}
        device=\${devices[$n]}
        fsType=\${fsTypes[$n]}
        options=\${optionss[$n]}

        # If $device is already mounted somewhere else, unmount it first.
        prevMountPoint=$(cat /proc/mounts | grep \"^$device \" | sed 's|^[^ ]\\+ \\+\\([^ ]\\+\\).*|\\1|')

        if test \"$prevMountPoint\" = \"$mountPoint\"; then
             echo \"remounting $device on $mountPoint\"
             ${utillinux}/bin/mount -t \"$fsType\" -o remount,\"$options\" \"$device\" \"$mountPoint\" || true
             continue
        fi

        if test -n \"$prevMountPoint\"; then
            echo \"unmount $device from $prevMountPoint\"
            ${utillinux}/bin/umount \"$prevMountPoint\" || true
        fi

        echo \"mounting $device on $mountPoint\"

        mkdir -p \"$mountPoint\" || true
        ${utillinux}/bin/mount -t \"$fsType\" -o \"$options\" \"$device\" \"$mountPoint\" || true
    done

end script
  ";

}<commit_msg>* Mount file systems until a fixpoint is reached. * Work properly for loopback mounts.<commit_after>{utillinux, fileSystems}:

let

  # !!! use XML
  mountPoints = map (fs: fs.mountPoint) fileSystems;
  devices = map (fs: fs.device) fileSystems;
  fsTypes = map (fs: if fs ? fsType then fs.fsType else "auto") fileSystems;
  optionss = map (fs: if fs ? options then fs.options else "defaults") fileSystems;

in 

{
  name = "filesystems";
  
  job = "
start on startup
start on new-devices

script
    mountPoints=(${toString mountPoints})  
    devices=(${toString devices})
    fsTypes=(${toString fsTypes})
    optionss=(${toString optionss})

    newDevices=1

    # If we mount any file system, we repeat this loop, because new
    # mount opportunities may have become available (such as images
    # for loopback mounts).
    
    while test -n \"$newDevices\"; do

        newDevices=

        for ((n = 0; n < \${#mountPoints[*]}; n++)); do
            mountPoint=\${mountPoints[$n]}
            device=\${devices[$n]}
            fsType=\${fsTypes[$n]}
            options=\${optionss[$n]}

            # If $device is already mounted somewhere else, unmount it first.
            # !!! Note: we use /etc/mtab, not /proc/mounts, because mtab
            # contains more accurate info when using loop devices.
            prevMountPoint=$(
                cat /etc/mtab \\
                | grep \"^$device \" \\
                | sed 's|^[^ ]\\+ \\+\\([^ ]\\+\\).*|\\1|' \\
            )

            if test \"$prevMountPoint\" = \"$mountPoint\"; then
                 echo \"remounting $device on $mountPoint\"
                 ${utillinux}/bin/mount -t \"$fsType\" \\
                     -o remount,\"$options\" \\
                     \"$device\" \"$mountPoint\" || true
                 continue
            fi

            if test -n \"$prevMountPoint\"; then
                echo \"unmount $device from $prevMountPoint\"
                ${utillinux}/bin/umount \"$prevMountPoint\" || true
            fi

            echo \"mounting $device on $mountPoint\"

            if ${utillinux}/bin/mount -t \"$fsType\" -o \"$options\" \"$device\" \"$mountPoint\"; then
                newDevices=1
            fi
        
        done

    done

end script
  ";

}
{'fraction_non_alphanumeric': 0.16, 'fraction_numerical': 0.0015483870967741935, 'mean_word_length': 2.011655011655012, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '334246', 'n_tokens_mistral': 1213, 'n_tokens_neox': 1160, 'n_words': 337}