Skip to content

Commit 2a21c8f

Browse files
authored
Merge pull request #6703 from rjbou/filename-trailing-slash
API: remove duplicated directory separator when creating a filename
2 parents d6e7ba5 + 015026c commit 2a21c8f

File tree

3 files changed

+10
-3
lines changed

3 files changed

+10
-3
lines changed

master_changes.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ users)
3434
## UI
3535
* Show the invalid character when detecting an erroneous package name [#6638 @lefessan - fix #6396]
3636
* Handle non-displayable characters when detecting an erroneous package name or version [#6640 @kit-ty-kate]
37+
* Remove duplicated directory separator when displaying some rare filenames [#6703 @rjbou]
3738

3839
## Switch
3940

@@ -202,3 +203,4 @@ users)
202203
* `OpamStd.String.contains_char`: was removed. Use `Stdlib.String.contains` instead. [#6442 @kit-ty-kate]
203204
* `OpamStd.String.map`: was removed. Use `Stdlib.String.map` instead. [#6442 @kit-ty-kate]
204205
* `OpamStd.String.{starts_with,ends_with,for_all,fold_left}`: were moved to `OpamCompat.String` [#6442 @kit-ty-kate]
206+
* `OpamFilename.create`: deduplicate the directory separator character when the basename starts with one [#6703 @rjbou]

src/core/opamFilename.ml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,11 @@ let create dirname basename =
159159
if basename = b2 then
160160
{ dirname; basename }
161161
else
162+
let b1 =
163+
if dirname = ""
164+
then b1
165+
else OpamStd.String.remove_prefix ~prefix:Filename.dir_sep b1
166+
in
162167
{ dirname = dirname / b1; basename = b2 }
163168

164169
let of_basename basename =

tests/reftests/extrafile.test

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ The following actions will be performed:
546546

547547
<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
548548

549-
Sys_error("${BASEDIR}/OPAM/repo/default/packages/escape-absolute/escape-absolute.1/files//etc/passwdd: No such file or directory")
549+
Sys_error("${BASEDIR}/OPAM/repo/default/packages/escape-absolute/escape-absolute.1/files/etc/passwdd: No such file or directory")
550550

551551

552552
<><> Error report <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
@@ -562,7 +562,7 @@ The following actions will be performed:
562562

563563
<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
564564

565-
Sys_error("${BASEDIR}/OPAM/repo/default/packages/escape-absolute/escape-absolute.1/files//etc/passwdd: No such file or directory")
565+
Sys_error("${BASEDIR}/OPAM/repo/default/packages/escape-absolute/escape-absolute.1/files/etc/passwdd: No such file or directory")
566566

567567

568568
<><> Error report <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
@@ -573,7 +573,7 @@ Sys_error("${BASEDIR}/OPAM/repo/default/packages/escape-absolute/escape-absolute
573573
# Return code 31 #
574574
### opam source escape-absolute
575575
Fatal error:
576-
Sys_error("${BASEDIR}/OPAM/repo/default/packages/escape-absolute/escape-absolute.1/files//etc/passwdd: No such file or directory")
576+
Sys_error("${BASEDIR}/OPAM/repo/default/packages/escape-absolute/escape-absolute.1/files/etc/passwdd: No such file or directory")
577577
# Return code 99 #
578578
### test -f escape-absolute.1/p.patch
579579
# Return code 1 #

0 commit comments

Comments
 (0)