Skip to content

dosforge 0.6.11

Choose a tag to compare

@github-actions github-actions released this 06 Jun 21:41
· 110 commits to main since this release

dosforge v0.6.11 — Windows

Fifth and (hopefully) final fix for PC-DOS 2000 hydration on Windows.

What v0.6.10's diagnostics caught

mcopy disk01.img exit=1 stderr_tail=
  'Failure to make directory .//: No such file or directory\n'

The new error capture from v0.6.10 paid off immediately — on Windows
the mingw mtools 4.0.49 build appends its own trailing / to a
destination dir argument, so passing ./ became .// and mkdir
failed with ENOENT. Linux mtools doesn't double-slash, which is why
the bug only manifested on Windows.

v0.6.11 fix

Pass . (no trailing slash) as the destination. mtools still
recognizes it as the cwd and writes files into it without trying to
mkdir a literal .// path. Verified that Linux mcopy also accepts
. (no behavioral change there).

subprocess.run(
    [mcopy, "-s", "-n", "-m", "-i", str(img), "::", "."],   # was "./"
    cwd=str(dest_dir),
    ...,
)

Verification

Drop IBM PC-DOS 2000 (3.5-1.44mb).7z (or raw disk0*.img) into
dosforge\dosassets\pcdos2000\, click Fetch PC-DOS 7.1 (SGTK)
assets
. You should now see:

[pcdos71]   found 6 install floppies in archive
[pcdos71]   harvested 76+ files from floppies          ← was 0
[pcdos71]   unpacking DOS1, DOS2, DOS3, DOS4, SHELL1, SHELL2 via DOSBox-X…
[pcdos71]   merged PC-DOS 2000 utilities: 96 added, 9 skipped (SGTK wins)
[pcdos71] Done.

Final VHD C:\DOS\ should land with ~138 files (EMM386, POWER,
DOSSHELL, DEFRAG, BACKUP, RESTORE, and the other PC-DOS 2000 tools
merged over the SGTK base).

Full fix chain (v0.6.7 → v0.6.11)

Release Bug
v0.6.7 Manifest only extracted dosbox-x.exe, not its support files
v0.6.8 PyInstaller spec flattened nested vendor subdirs, dropping dosbox-x.exe
v0.6.9 7z.exe shell-out failed (Windows ships no 7-Zip); switched to py7zr/zipfile
v0.6.10 mtools parsed C:\… dest as drive alias; switched to cwd= + relative path
v0.6.11 Windows mtools appends /, so ./ becomes .//; pass . instead