GNU bug report logs - #24450
pypi importer outputs strange character series in optional dependency case.

Previous Next

Package: guix;

Reported by: ng0 <ng0 <at> we.make.ritual.n0.is>

Date: Fri, 16 Sep 2016 20:02:01 UTC

Severity: normal

Tags: patch

Merged with 24557, 33047, 33569, 34266

Done: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Ricardo Wurmus <ricardo.wurmus <at> mdc-berlin.de>
To: Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
Cc: 24450 <at> debbugs.gnu.org
Subject: bug#24450: [PATCHv2] Re: pypi importer outputs strange character series in optional dependency case.
Date: Wed, 12 Jun 2019 08:39:12 +0200
Hi Maxim,

>>>    (call-with-input-file requires.txt
>>>      (lambda (port)
>>> -      (let loop ((result '()))
>>> +      (let loop ((required-deps '())
>>> +                 (test-deps '())
>>> +                 (inside-test-section? #f)
>>> +                 (optional? #f))
>>>          (let ((line (read-line port)))
>>> -          ;; Stop when a section is encountered, as sections contains optional
>>> -          ;; (extra) requirements.  Non-optional requirements must appear
>>> -          ;; before any section is defined.
>>> -          (if (or (eof-object? line) (section-header? line))
>>> +          (if (eof-object? line)
>>>                ;; Duplicates can occur, since the same requirement can be
>>>                ;; listed multiple times with different conditional markers, e.g.
>>>                ;; pytest >= 3 ; python_version >= "3.3"
>>>                ;; pytest < 3 ; python_version < "3.3"
>>> -              (reverse (delete-duplicates result))
>>> +              (map (compose reverse delete-duplicates)
>>> +                   (list required-deps test-deps))
>>
>> Looks like a list of lists to me.  “delete-duplicates” now won’t delete
>> a name that is in both “required-deps” as well as in “test-deps”.  Is
>> this acceptable?
>
> It is acceptable, as this corner case cannot exist given the current
> code (a requirement can exist in either required-deps or test-deps, but
> never in both). It also doesn't make sense that a run time requirement
> would also be listed as a test requirement, so that corner case is not
> likely to exist in the future either.

I mentioned it because I believe I’ve seen this in the past where the
importer would return some of the same inputs as both regular inputs and
test dependencies.

>> Personally, I’m not a fan of using data structures for returning
>> multiple values, because we can simply return multiple values.
>
> I thought the Guile supported multiple values return value would be
> great here as well, but I've found that for this specific case here, a
> list of lists worked better, since the two lists contain requirements to
> be processed the same, which "map" can readily do (i.e. less ceremony is
> required).

“map” can also operate on more than one list at a time:

    (call-with-values
      (lambda ()
        (values (list 1 2 3)
                (list 9 8 7)))
      (lambda (a b) (map + a b)))

    => (10 10 10)

Of course, it would be simpler to just use a single list of tagged
items.

--
Ricardo




This bug report was last modified 6 years and 13 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.