[Notes] [Git][BuildStream/buildstream][willsalmon/bugfix/CWDnotcreated] 2 commits: Bug: CWD was not being created for workspaces



Title: GitLab

Will Salmon pushed to branch willsalmon/bugfix/CWDnotcreated at BuildStream / buildstream

Commits:

4 changed files:

Changes:

  • buildstream/sandbox/_sandboxbwrap.py
    ... ... @@ -120,9 +120,6 @@ class SandboxBwrap(Sandbox):
    120 120
                 bwrap_command += ['--unshare-uts', '--hostname', 'buildstream']
    
    121 121
                 bwrap_command += ['--unshare-ipc']
    
    122 122
     
    
    123
    -        if cwd is not None:
    
    124
    -            bwrap_command += ['--chdir', cwd]
    
    125
    -
    
    126 123
             # Give it a proc and tmpfs
    
    127 124
             bwrap_command += [
    
    128 125
                 '--proc', '/proc',
    
    ... ... @@ -163,6 +160,10 @@ class SandboxBwrap(Sandbox):
    163 160
             if flags & SandboxFlags.ROOT_READ_ONLY:
    
    164 161
                 bwrap_command += ["--remount-ro", "/"]
    
    165 162
     
    
    163
    +        if cwd is not None:
    
    164
    +            bwrap_command += ['--dir', cwd]
    
    165
    +            bwrap_command += ['--chdir', cwd]
    
    166
    +
    
    166 167
             # Set UID and GUI
    
    167 168
             if self.user_ns_available:
    
    168 169
                 bwrap_command += ['--unshare-user']
    
    ... ... @@ -191,11 +192,6 @@ class SandboxBwrap(Sandbox):
    191 192
             with ExitStack() as stack:
    
    192 193
                 stack.enter_context(mount_map.mounted(self))
    
    193 194
     
    
    194
    -            # Ensure the cwd exists
    
    195
    -            if cwd is not None:
    
    196
    -                workdir = os.path.join(root_mount_source, cwd.lstrip(os.sep))
    
    197
    -                os.makedirs(workdir, exist_ok=True)
    
    198
    -
    
    199 195
                 # If we're interactive, we want to inherit our stdin,
    
    200 196
                 # otherwise redirect to /dev/null, ensuring process
    
    201 197
                 # disconnected from terminal.
    

  • buildstream/sandbox/sandbox.py
    ... ... @@ -197,6 +197,11 @@ class Sandbox():
    197 197
         def run(self, command, flags, *, cwd=None, env=None):
    
    198 198
             """Run a command in the sandbox.
    
    199 199
     
    
    200
    +        Note:
    
    201
    +            When reimplementing this function for sandbox specific implementations it is the sandbox's and probably
    
    202
    +            this functions responsibility to ensure that cwd is created correctly and that if a workspace is used
    
    203
    +            then the directory must be correctly created to take this in to account.
    
    204
    +
    
    200 205
             Args:
    
    201 206
                 command (list): The command to run in the sandboxed environment, as a list
    
    202 207
                                 of strings starting with the binary to run.
    

  • tests/integration/project/elements/workspace/workspace-commanddir.bst
    1
    +kind: manual
    
    2
    +description: Workspace mount test
    
    3
    +
    
    4
    +depends:
    
    5
    +  - filename: base.bst
    
    6
    +    type: build
    
    7
    +
    
    8
    +sources:
    
    9
    +  - kind: local
    
    10
    +    path: files/workspace-mount-src/
    
    11
    +
    
    12
    +variables:
    
    13
    +  command-subdir: build
    
    14
    +
    
    15
    +config:
    
    16
    +  build-commands:
    
    17
    +    - cc -c ../hello.c

  • tests/integration/workspace.py
    ... ... @@ -31,6 +31,21 @@ def test_workspace_mount(cli, tmpdir, datafiles):
    31 31
     
    
    32 32
         assert os.path.exists(os.path.join(cli.directory, 'workspace'))
    
    33 33
     
    
    34
    +@pytest.mark.integration
    
    35
    +@pytest.mark.datafiles(DATA_DIR)
    
    36
    +def test_workspace_commanddir(cli, tmpdir, datafiles):
    
    37
    +    project = os.path.join(datafiles.dirname, datafiles.basename)
    
    38
    +    workspace = os.path.join(cli.directory, 'workspace')
    
    39
    +    element_name = 'workspace/workspace-commanddir.bst'
    
    40
    +
    
    41
    +    res = cli.run(project=project, args=['workspace', 'open', element_name, workspace])
    
    42
    +    assert res.exit_code == 0
    
    43
    +
    
    44
    +    res = cli.run(project=project, args=['build', element_name])
    
    45
    +    assert res.exit_code == 0
    
    46
    +
    
    47
    +    assert os.path.exists(os.path.join(cli.directory, 'workspace'))
    
    48
    +    assert os.path.exists(os.path.join(cli.directory, 'workspace', 'build'))
    
    34 49
     
    
    35 50
     @pytest.mark.integration
    
    36 51
     @pytest.mark.datafiles(DATA_DIR)
    



  • [Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]