Skip to content

Commit

Permalink
Add os::directory_files/3 predicate prefixes/1 and suffixes/1 o…
Browse files Browse the repository at this point in the history
…ptions
  • Loading branch information
pmoura committed Nov 23, 2017
1 parent 97792de commit 8332105
Show file tree
Hide file tree
Showing 7 changed files with 69 additions and 21 deletions.
8 changes: 8 additions & 0 deletions RELEASE_NOTES.md
Expand Up @@ -57,6 +57,12 @@ methods.

* UPDATED: User Manual section on debugging messages.

Library
-------

* ADDED: Options `prefixes/1` and `suffixes/1` to the `os::directory_files/3`
predicate.

Tools
-----

Expand All @@ -67,6 +73,8 @@ Tests

* ADDED: Unit tests for the new error throwing built-in methods.

* ADDED: Unit tests for the new `os::directory_files/3` predicate options.

Examples
--------

Expand Down
2 changes: 1 addition & 1 deletion docs/index.html
Expand Up @@ -16,6 +16,6 @@ <h1>Documentation index</h1>
<li><a href="entity_index.html">Entity index</a></li>
<li><a href="predicate_index.html">Predicate index</a></li>
</ul>
<p>Generated on Thu Nov 9 18:52:17 GMT 2017</p>
<p>Generated on Thu Nov 23 00:33:33 GMT 2017</p>
</body>
</html>
4 changes: 2 additions & 2 deletions docs/os_0.html
Expand Up @@ -23,11 +23,11 @@ <h1 class="code">os</h1>
</dd>
<dt class="key">version:</dt>
<dd class="value">
<code>1.43</code>
<code>1.44</code>
</dd>
<dt class="key">date:</dt>
<dd class="value">
<code>2017/10/9</code>
<code>2017/11/22</code>
</dd>
</dl>
<dl class="properties">
Expand Down
6 changes: 3 additions & 3 deletions docs/osp_0.html
Expand Up @@ -23,11 +23,11 @@ <h1 class="code">osp</h1>
</dd>
<dt class="key">version:</dt>
<dd class="value">
<code>1.21</code>
<code>1.22</code>
</dd>
<dt class="key">date:</dt>
<dd class="value">
<code>2017/9/10</code>
<code>2017/11/22</code>
</dd>
</dl>
<dl class="properties">
Expand Down Expand Up @@ -285,7 +285,7 @@ <h3 id="directory_files/2" class="code">directory_files/2</h3>
<div class="section">
<h3 id="directory_files/3" class="code">directory_files/3</h3>
<blockquote>
<p class="comment">Returns a filtered list of directory files. Filter options are: paths/1 - {relative,absolute}, type/1 - {all,regular,directory}, extensions/1 - list, and dot_files/1 - boolean. Invalid options are ignored. Default options equivalent to directory_files/2.</p>
<p class="comment">Returns a filtered list of files. Filters: paths/1 - relative/absolute, type/1 - all/regular/directory, extensions/1 - list, prefixes/1 - list, suffixes/1 - list, dot_files/1 - boolean. Invalid options ignored. Defaults equivalent to directory_files/2.</p>
</blockquote>
<dl class="properties">
<dt class="key">compilation flags:</dt>
Expand Down
46 changes: 36 additions & 10 deletions library/os.lgt
Expand Up @@ -40,9 +40,9 @@
implements(osp)).

:- info([
version is 1.43,
version is 1.44,
author is 'Paulo Moura',
date is 2017/10/09,
date is 2017/11/22,
comment is 'Portable operating-system access predicates.',
remarks is [
'File path expansion' - 'To ensure portability, all file paths are expanded before being handed to the backend Prolog system.',
Expand Down Expand Up @@ -1720,19 +1720,27 @@
filter_extensions(Files1, [Extension| Extensions], Files2)
; Files2 = Files1
),
( list::member(prefixes([Prefix| Prefixes]), Options),
ground([Prefix| Prefixes]) ->
filter_prefixes(Files2, [Prefix| Prefixes], Files3)
; Files3 = Files2
),
( list::member(suffixes([Suffix| Suffixes]), Options),
ground([Suffix| Suffixes]) ->
filter_suffixes(Files3, [Suffix| Suffixes], Files4)
; Files4 = Files3
),
( list::member(dot_files(Boolean), Options),
Boolean == false ->
filter_dot_files(Files2, Files3)
; Files3 = Files2
filter_dot_files(Files4, Files5)
; Files5 = Files4
),
( list::member(paths(Paths), Options) ->
( Paths == relative ->
Files = Files3
; Paths == absolute ->
expand_relative_paths(Files3, Directory, Files)
; Files = Files3
( Paths == absolute ->
expand_relative_paths(Files5, Directory, Files)
; Files = Files5
)
; Files = Files3
; Files = Files5
).

filter_regular([], _, []).
Expand Down Expand Up @@ -1762,6 +1770,24 @@
; filter_extensions(Files0, Extensions, Files)
).

filter_prefixes([], _, []).
filter_prefixes([File0| Files0], Prefixes, Files) :-
( list::member(Prefix, Prefixes),
sub_atom(File0, 0, _, _, Prefix) ->
Files = [File0| Rest],
filter_prefixes(Files0, Prefixes, Rest)
; filter_prefixes(Files0, Prefixes, Files)
).

filter_suffixes([], _, []).
filter_suffixes([File0| Files0], Suffixes, Files) :-
( list::member(Suffix, Suffixes),
sub_atom(File0, _, _, 0, Suffix) ->
Files = [File0| Rest],
filter_suffixes(Files0, Suffixes, Rest)
; filter_suffixes(Files0, Suffixes, Files)
).

filter_dot_files([], []).
filter_dot_files([File0| Files0], Files) :-
( sub_atom(File0, 0, 1, _, '.') ->
Expand Down
6 changes: 3 additions & 3 deletions library/osp.lgt
Expand Up @@ -21,9 +21,9 @@
:- protocol(osp).

:- info([
version is 1.21,
version is 1.22,
author is 'Paulo Moura',
date is 2017/09/10,
date is 2017/11/22,
comment is 'Portable operating-system access protocol.',
see_also is [os_types]
]).
Expand Down Expand Up @@ -115,7 +115,7 @@
:- public(directory_files/3).
:- mode(directory_files(+atom, -list(atom), +list(compound)), one).
:- info(directory_files/3, [
comment is 'Returns a filtered list of directory files. Filter options are: paths/1 - {relative,absolute}, type/1 - {all,regular,directory}, extensions/1 - list, and dot_files/1 - boolean. Invalid options are ignored. Default options equivalent to directory_files/2.',
comment is 'Returns a filtered list of files. Filters: paths/1 - relative/absolute, type/1 - all/regular/directory, extensions/1 - list, prefixes/1 - list, suffixes/1 - list, dot_files/1 - boolean. Invalid options ignored. Defaults equivalent to directory_files/2.',
argnames is ['Directory', 'Files', 'Options']
]).

Expand Down
18 changes: 16 additions & 2 deletions tests/logtalk/library/os/tests.lgt
Expand Up @@ -22,9 +22,9 @@
extends(lgtunit)).

:- info([
version is 0.6,
version is 0.7,
author is 'Paulo Moura',
date is 2017/10/09,
date is 2017/11/22,
comment is 'Unit tests for the "os" object.'
]).

Expand Down Expand Up @@ -285,6 +285,20 @@
\+ sub_atom(File, 0, 1, _, '.')
).

test(os_directory_files_3_09) :-
this(This),
object_property(This, file(_,Directory)),
os::directory_files(Directory, Files, [type(regular), paths(relative), prefixes(['test'])]),
list::memberchk('tests.lgt', Files),
list::memberchk('tester.lgt', Files).

test(os_directory_files_3_10) :-
this(This),
object_property(This, file(_,Directory)),
os::directory_files(Directory, Files, [type(regular), paths(relative), suffixes(['r.lgt'])]),
\+ list::member('tests.lgt', Files),
list::memberchk('tester.lgt', Files).

setup :-
cleanup.

Expand Down

0 comments on commit 8332105

Please sign in to comment.