PMXBOT Log file Viewer

Help | Karma | Search:

#pypa-dev logs for Tuesday the 24th of March, 2015

(Back to #pypa-dev overview) (Back to channel listing) (Animate logs)
[00:48:39] <dstufft> lifeless: reviewed
[01:20:25] <lifeless> dstufft: thanks
[01:20:29] <lifeless> dstufft: the cache thing - up to you
[01:20:48] <lifeless> dstufft: the logger stuff - I am confused, I preserved the logic exactly AFAICt
[01:21:10] <dstufft> I'd say just let it use the HTTP cache, for any properly setup server all HTTP access will be cached for 10 minutes for the index pages, and a long ass time for the fiels themselves
[01:21:36] <dstufft> lifeless: I sort out went around in circles there as I better understood what the changes were
[01:21:55] <lifeless> dstufft: I nearly have my actual feature working now :)
[01:22:09] <dstufft> lifeless: I think right now I'd just do what I said in the last comment, add the new line and modify things so that the skip method returns just a boolean and move the skip reason to just be hardcoded into that string
[01:22:34] <lifeless> dstufft: so we won't differentiate between the two sorts of skips anymore ?
[01:22:41] <lifeless> oh
[01:22:55] <lifeless> no, still confused
[01:23:03] <lifeless> that function is basically three-way
[01:23:32] <dstufft> where is skip_reason set to anything but "up-to-date" ?
[01:23:38] <lifeless> not skip / skip (up to date) / skip (didn't pass --upgrade)
[01:23:47] <lifeless> skip_reason = 'satisfied (use --upgrade to upgrade)'
[01:23:48] <lifeless> ...
[01:23:54] <dstufft> oh
[01:23:55] <lifeless> skip_reason = 'up to date'
[01:23:55] <dstufft> durr
[01:23:58] <dstufft> I'm slow sometimes
[01:24:20] <dstufft> I completely missed that because I was looking for a conditional
[01:25:40] <lifeless> where do you want this new line ?
[01:26:17] <dstufft> ok, then I'd go back to my second to last comment :), it might not be techincally possible for the skip_reason to ever be None if satisfied_by is not None, but explicitly declaring it to None before the conditonal I feel like will cause people to get confused less since it *looks* like it might be a bug right now
[01:26:47] <dstufft> you can omit the part about if skip_reason is not None and req_to_install.satisfied_by: if you think it's better to just be if req_to_install.satisfied_by: I'm OK either way on that
[01:26:48] <lifeless> how about an assert
[01:27:03] <lifeless> I'd rather have an assert than something that makes the bad state look legit
[01:27:28] <lifeless> if satisfiedy_by: assert skip_reason is not None; logger.info...
[01:27:54] <dstufft> lifeless: https://bpaste.net/show/be4e59616a86 like that?
[01:28:14] <dstufft> adding the skip_reason = None and the assert and the new line
[01:28:15] <dstufft> that would be OK with me
[01:28:22] <lifeless> no
[01:28:36] <lifeless> we can't move the skip_skip_installed in the guard since satisfied_by isn't set.
[01:28:39] <lifeless> sec
[01:29:46] <dstufft> I'm not talking about moving that
[01:30:04] <dstufft> just stick skip_reason = None on line 377
[01:30:12] <lifeless> http://paste.ubuntu.com/10665436/
[01:30:14] <dstufft> and the assert on line 381
[01:31:24] <dstufft> the thing that feels like a bug to me, is that it's theortically possible for the logger call that uses skip_reason to run without the skip_reason being declared
[01:31:35] <lifeless> not with that assert added
[01:33:59] <lifeless> so my concern is this: we haven't considered what should be output if its satisfied and we haven't run the check_skip_installed code
[01:34:05] <lifeless> outputting None in the UI would be a bug.
[01:34:21] <lifeless> the reason we haven't considered that is because the code isn't setup to ever encounter that
[01:34:28] <lifeless> -> assert IMO
[01:34:53] <lifeless> but - your code base, and I fundamentally have no long term self-interest here (other than the easier it is for you to maintain, the better it can be maintained :))
[01:35:00] <lifeless> so make a call, and I'll do it :>
[01:37:08] <dstufft> https://bpaste.net/show/e8bc65d86bc1 I think would achieve a similar and is more obvious to me about the particular thing that confused me.
[01:37:11] <lifeless> one advantage of an assert is that if someone adds code to set satisfied_by earlier
[01:37:16] <lifeless> it will raise in tests
[01:37:21] <dstufft> I'm not opposed to also adding your assert though TBH
[01:37:49] <dstufft> for the reason you just specified
[01:37:51] <lifeless> one difference between them
[01:38:10] <lifeless> is that your one traps _check_skip_installed failing to return a reason
[01:38:16] <lifeless> and mine traps bad entry into that code block
[01:38:25] <lifeless> almost tempted to have both
[01:38:44] <dstufft> both makes sense to me, because both states are things we assume won't happen yea?
[01:38:50] <lifeless> yes
[01:41:18] <lifeless> dstufft: http://paste.ubuntu.com/10665502/
[01:41:35] <dstufft> cool, so then i'd add both assert statements, and drop the changes to PackageFinder and rely on the HTTP cache (for now anyways, I'll probably go in and change the return values and add a lru cache to the call unless you do it first, but if not it's ok)
[01:41:39] <dstufft> lifeless: looks good to me
[01:41:53] <dstufft> with that and the Packagefinder changes I'll merge it
[01:47:35] <dstufft> lifeless: fwiw, you've made some solid improvements to one of the crappier parts of pip's code base, So thanks for that ;)
[01:48:15] <lifeless> thanks
[01:48:34] <lifeless> did you have a think about my question ?
[01:49:44] <dstufft> lifeless: which question is that?
[01:50:21] <lifeless> https://github.com/pypa/pip/pull/2587/files#diff-abf8962da0a79184dd2c4bf311fc9b57R348
[01:50:24] <lifeless> dstufft: ^
[01:50:41] <dstufft> ah
[01:50:44] <dstufft> that one
[01:51:12] <lifeless> that is the reason we had the finder cache at all
[01:53:08] <dstufft> I'm trying to think of why we'd want to delay the exception
[01:53:10] <dstufft> looing
[01:53:14] <dstufft> looking*
[01:53:18] <lifeless> I haven't tested but I suspect just dropping that catch (or making it log an error straight up) would be reasonable
[01:53:30] <lifeless> catch + log is the idiom in there
[01:56:44] <dstufft> so
[01:57:09] <dstufft> I think the reason that exists, is so if you have something installed that isn't available on PyPI (you installed it from an sdist or something), which satisifies your current requirements
[01:57:18] <lifeless> nope
[01:57:27] <lifeless> or maybe
[01:57:31] <lifeless> I hate this bit :)
[01:58:18] <lifeless> 14:05 < lifeless> yes
[01:58:19] <lifeless> 14:06 < lifeless> *possibly* --no-install
[01:58:19] <lifeless> 14:06 < dstufft> I don't know the answer to that
[01:58:19] <lifeless> 14:06 < dstufft> I've seen it before, but I never bothered to figure out why
[01:58:19] <lifeless> 14:07 < lifeless> but it will cause a silent failure for the no-install case, because we will be missing one or
[01:58:21] <lifeless> more dists and no announcement
[01:58:24] <lifeless> from friday
[01:59:02] <dstufft> In the current code, th eonly time that'll be re-raised is if we're *not* skipping the install, but if we're skipping because whatever is installed already satisifies the requirement we don't want to fail just because the thing isn't available on PyPI
[01:59:21] <lifeless> ETRIPLENEGATIVE?
[02:00:08] <dstufft> pip install ./thingthatisntonpypi-1.0.tar.gz && pip install thingthatisnotonpypi
[02:00:46] <dstufft> well actually it'd be:
[02:00:52] <dstufft> pip install ./thingthatisntonpypi-1.0.tar.gz && pip install --upgrade thingthatisnotonpypi
[02:02:10] <dstufft> I *think* that with the current code, that won't fail (it'll just silently not find anything on PyPI), but if you did something like pip install -U thingthatisnotonpypi>=2.0, it would fail then
[02:02:44] <dstufft> does that make sense?
[02:03:26] <lifeless> its plausible
[02:03:32] <lifeless> I don't think its desirable, is it ?
[02:04:29] <lifeless> like, if we want to make that situation not an error
[02:04:36] <lifeless> we should handle it more pervasively
[02:08:14] <dstufft> I think we want to preserve that property (assuming my thoughts on why that is like that are correct)
[02:08:24] <dstufft> (trying to think through all the implications)
[02:08:29] <lifeless> so one scenario
[02:08:33] <lifeless> is you have two new packages
[02:08:38] <lifeless> neither on pypi
[02:08:47] <lifeless> and want to be able to pip install path-to-new-one
[02:08:56] <lifeless> but that dep can't be versioned today
[02:10:07] <dstufft> the thing that is installed gets a version, we just can't sanely locate new versions for it, but we can determine if what is already installed matches the given specifier
[02:11:49] <lifeless> right
[02:11:54] <lifeless> I don't think we fully do that today
[02:12:00] <lifeless> should capture this in an issue I think
[02:36:40] <dstufft> lifeless: are all the changes in https://github.com/pypa/pip/pull/2587 ready to go? I did a quick skim and it looks good to me still, tests are passing so unless you plan on adding more to it i'm going to merge
[02:37:14] <lifeless> dstufft: next patch is my BABY
[02:37:17] <lifeless> dstufft: merge it
[02:37:45] <dstufft> lifeless: done!
[02:37:53] <lifeless> wicked
[02:37:57] <lifeless> I'm just debugging this
[02:38:00] <lifeless> its a bit exploratory
[02:38:04] <lifeless> subclassing Distribution...
[02:39:29] <dstufft> cool
[02:40:04] <dstufft> gonna watch some TV, if you need anything just ping me and I should hear it (unless I fell asleep -.-)
[02:41:13] <lifeless> cool, thanks
[03:22:42] <lifeless> dstufft: around ?
[03:23:19] <lifeless> dstufft: nvm, think I have it
[07:07:06] <lifeless> profit!
[07:07:08] <lifeless> PYTHONPATH=. pip install tests/data/packages/SetupRequires -f tests/data/packages
[07:07:11] <lifeless> Processing ./tests/data/packages/SetupRequires
[07:07:14] <lifeless> Collecting upper (from SetupRequires)
[07:07:16] <lifeless> Installing collected packages: upper, SetupRequires
[07:07:19] <lifeless> Running setup.py install for upper
[07:07:21] <lifeless> Running setup.py install for SetupRequires
[07:07:24] <lifeless> Successfully installed SetupRequires-0.0.1 upper-2.0
[14:37:32] <qwcode> dstufft, PR 2603 is seriously being considered?
[14:40:06] <sigmavirus24> qwcode: I believe it was discussed on distutils-sig and deemed not a terrible diea
[14:40:08] <sigmavirus24> *idea
[14:40:48] <qwcode> did that discussion include "dist-requires" as well
[14:41:32] <sigmavirus24> I skimmed it for the most part, so I'm not entirely certain
[14:41:52] <dstufft> qwcode: the general idea of doing it for setup-requires was discussed, I'm still on the fence about it but leaning towards "It's probably OK and will solve some problems people have at the expense of creating some other problelms", so people using it will need to make a decision about trade offs
[14:42:14] <dstufft> as far as pulling install_requires from setup.cfg as well, that wasn't fully discussed, lifeless and myself discussed it here in IRC some
[14:43:15] <dstufft> the underlying problem is you have to do one of two things, either read install_requires from setup.cfg and not execute setup.py egg_info or you have to install the setup_requires stuff to a temporary location, add that temporary location to the path and then execute the setup.py egg_info
[14:43:34] <dstufft> because we need to collect all of the dependencies before we actually install anything into the target environment
[14:44:14] <qwcode> I was assuming the latter.... temporary location
[14:44:19] <qwcode> I would guess the rationale for doing this w/o a PEP is that this is in the terrain of "project implementation", i.e. not interfering with the "internal metadata" format?
[14:44:20] <dstufft> I believe lifeless picked the "read install_requires from setup.cfg" to implement and was going to leave it like that for discussion to see how people felt about that, or if they think it should go the other way
[14:47:45] <qwcode> it's just surprising to me that the d2 effort went on for years trying to get stuff into setup.cfg (officially with PEPs)... and for the last year, it's been about PEP426... and now this could just shuffled in like this?
[14:49:04] <ionelmc> qwcode: it doesn't require different packaging tool for one
[14:49:28] <ionelmc> dstufft: is setuptools also getting a PR with support for this?
[14:50:04] <qwcode> I guess for me, it's about being more clear on what's the terrain of PEP426, and what's the terrain of the tools that implement it... this feels ad hoc to me
[14:50:32] <dstufft> PEP426 and this solves (slightly) different problems
[14:50:46] <dstufft> with some overlap because setuptools is everywhere
[14:51:31] <dstufft> PEP426 metadata is all about what exists inside of a distribution could be an sdist or a Wheel
[14:51:38] <ionelmc> dstufft: just to understand this correctly, the PR basically solves the problem of people being too lazy to do lazy imports in setup.py yes?
[14:52:14] <dstufft> but there are cases where you're *not* installing from a distribution, you could be installing from a directory, or installing from a VCS repo or what have you
[14:52:25] <sigmavirus24> ionelmc: I think there's far more to it that you're missing
[14:52:39] <dstufft> PEP 426 doesn't handle those cases at all, because there's no distribution so there's no PEP 426 metadata
[14:52:47] <qwcode> but this creates a whole new way of declaring "install_requires" using setup.cfg.... that's really my concern.... we're creating a big fork in how projects will be configured
[14:53:01] <sigmavirus24> ionelmc: setup_requires only uses easy_install for installation because setuptools handles it, which means that configuring alternative indices is problematic (if I understood the changes correct)
[14:53:12] <sigmavirus24> It means that pip now handles those instead of easy_install
[14:53:52] <ionelmc> sigmavirus24: alternative indices?! what do you mean?
[14:53:52] <lifeless> ionelmc: lazy imports are not always possible - try making version number look up properly lazy - its freakishly unreliable
[14:54:24] <lifeless> ionelmc: secondly, there's a bunch of features easy_install doesn't have, such as using pip's download cache, https validation, additional indices etc
[14:54:43] <dstufft> qwcode: the install_requires thing is just a decision, the change is primarily focused on setup_requires, afaik lifeless just picked to also include install_requires because it was easier than installing into a temp location. We can decide that we don't want to support install_requires from setup.cfg while still keeping the important part of this change (that setup_requires comes from setup.cfg), it'll just be more effort to first install the
[14:54:44] <dstufft> setup-requires into a temp location, then execute egg_info
[14:55:02] <lifeless> ionelmc: thirdly distros like Debian, Redhat etc really really don't like packages that go to the internet at build time
[14:55:36] <dstufft> there are a few problems with setup_requires as they exist today
[14:55:42] <lifeless> ionelmc: so they generally run builds without internet connectivity, and when setup_requires is triggered, that fails, then they add the new requirements
[14:56:56] <ionelmc> lifeless: there are alternatives to the version extraction issue
[14:57:21] <dstufft> 1) Because they don't get installed until after the setup() function starts to execute, you have to do things to delay imports that rely on them, this is annoying (and sometimes hard) 2) setup_requires are handled by setuptools not by pip, so you get two different things touching the network (with two different sets of configuration) which leads to confusion and problems (setuptools doesn't support a configurable certificate bundle I believe,
[14:57:21] <dstufft> so if you're using pip install --cert things are going to break)
[14:57:53] <ionelmc> would the PR make existing usage of setup_requires use pip's installer/cache/etc ?
[14:58:14] <sigmavirus24> ionelmc: as lifeless and I explained, that's not plausible
[14:58:48] <dstufft> this solves both of those problems for projects which opt in to the solution by having pip locate the setup_requires from a setup.cfg (and then either execute setup.py egg_info once you install those toa temp location, or also look up install_requires from there, depending on what way is decided)
[14:58:54] <ionelmc> sigmavirus24: that what?
[14:59:01] <ionelmc> not sure what you've answered
[14:59:03] <dstufft> It does not solve any problems for people who don't opt into it
[14:59:12] <dstufft> (it also doesn't create new problems for those people)
[14:59:27] <sigmavirus24> ionelmc: "would the PR make existing usage of setup_requires use pip's installer/cache/etc ?" that's not plausible
[14:59:51] <sigmavirus24> As we've already explained, setuptools uses easy_install for anything in setup_requires.
[15:00:00] <dstufft> It's possible to do that, but it requires monkeypatching setuptools being run inside of a subprocess from outside the subprocess
[15:00:07] <dstufft> I have a branch that half way does it
[15:00:19] <dstufft> it doesn't solve the first issue I described, it does solve the second issue
[15:00:28] <dstufft> and it's not opt in so it solves it by default
[15:00:41] <dstufft> it's also a terrible fragile hack
[15:01:57] <qwcode> let's at least call them "setup-requires" and "install-requires" (not "requires-setup" and "requires-dist")
[15:02:23] <sigmavirus24> qwcode: I have 0 opinions on the color of that yak's hair so we should do whatever people agree makes the most sense
[15:02:36] <qwcode> this is more than color
[15:02:46] <dstufft> qwcode: so ignoring the install_requires bit for right now (because that was just an implementation choice, not a key part of the thing being solved), the idea here is that package authors can choose to use setup.cfg to declare their setup_requires which means that (unless they include some backwards compat code inside of setup.py) their thing can only be installed by pip (possibly easy_install too if a patch is added there) but not by
[15:02:46] <dstufft> ``setup.py install`` unless you first install the setup_requires
[15:02:51] <lifeless> qwcode: d2to1 defined requires-dist
[15:02:56] <lifeless> qwcode: I was being compatible with that
[15:03:07] <lifeless> qwcode: even though I loath the keys.
[15:03:51] <lifeless> qwcode: I leave the bikeshedding to reviewers
[15:03:59] <qwcode> why do we care about d2to1 compat?
[15:04:18] <dstufft> what you get from that is you don't have to do tricks to delay imports, and pip controls the installation of the setup-requires
[15:04:20] <lifeless> qwcode: e.g. if the reviewer consensus is that nicer keys matter, fine. Or compat on the d2to1 key but nicer on the new one, etc.
[15:05:26] <lifeless> qwcode: why do we care? ecosystem impact - folk have used d2to1 (e.g. all the pbr users out there are basically using chunks of d2to1)
[15:06:02] <dstufft> lifeless: otoh pbr users don't use requires-dist do they? They're using requirements.txt yea?
[15:06:07] <lifeless> qwcode: essentially I've just been conservative in the choice, and am totally happy to do $whatever as far as that is concerned
[15:06:10] <qwcode> for me "requires-setup" is boggling cause it reverses the causality... and "requires-dist" just creates something that you have to mentally associate with "install_requires", and worse, it almost looks like it might be from PEP426... and we don't want that confusion
[15:06:10] <lifeless> dstufft: right
[15:06:44] <lifeless> qwcode: I agree with all that. Happy to change; see above :)
[15:06:47] <dstufft> I think "setup-requires" is the right way to spell that particular key
[15:07:11] <ionelmc> so what does the PR actually add? it's not clear from the PR description
[15:07:44] <dstufft> ionelmc: the key thing is that you can stick your setup_requires inside of a setup.cfg and pip will ensure they are installed before your setup.py is executed
[15:08:14] <dstufft> it also currently forces you to put your install_requires in setup.cfg if you're putting your setup_requires in setup.cfg
[15:08:17] <lifeless> pip will also do one less setup.py invocation, which will be a bit faster
[15:08:21] <ionelmc> dstufft: using pip's install, not whatever setuptools has, right?
[15:08:25] <dstufft> ionelmc: correct
[15:08:49] <dstufft> qwcode doesn't seem to be a fan of the not using egg_info to get the install_requires and instead reading them from setup.cfg
[15:08:51] <ionelmc> ok, cause sigmavirus24 confused me, he said that doesn't change
[15:08:57] <dstufft> I'm on the fence about it
[15:09:23] <dstufft> ionelmc: it _only_ changes if the package author opts in by adding their setup_requires to their setup.cfg
[15:09:43] <ionelmc> aaaah
[15:09:49] <dstufft> any package that uses setup_requires in their setup.py which doesn't specify them in setup.cfg will still behave as it does today
[15:09:58] <ionelmc> ok
[15:10:13] <ionelmc> dstufft: what's the deal with the egg_info?
[15:10:18] <lifeless> the key thing is this. Right now there is *no* way to avoid easy_install. There is /nothing/ that can be done.
[15:10:24] <qwcode> thinking about the fork that will get created (i.e. supporting install_requires in setup.cfg), and when that will be a pain down the road...
[15:10:27] <lifeless> This PR adds a way.
[15:10:49] <dstufft> setup.py egg_info is the command pip runs to get the dependencies from a sdist (right now anyways)
[15:10:50] <lifeless> qwcode: I don't understand the fork aspect...
[15:11:11] <dstufft> lifeless: two ways to specify install_requires, both inside of setup.py and inside of setup.cfg
[15:11:15] <lifeless> dstufft: btw we can probably avoid egg_info in sdists too and isolate that to just VCS checkouts
[15:11:31] <ionelmc> does the PR use egg_info to get the setup_requires from setup.cfg? or does it read it directly?
[15:11:39] <lifeless> dstufft: right, but if this is followed up with a patch to setuptools to allow it to read them from setup.cfg too...
[15:12:01] <lifeless> dstufft: (or even if this PR becomes 'depend on a new setuptools that does that...')
[15:12:10] <qwcode> lifeless, not pip vs setuptools fork, just that some projects using install_requires from setup, others using from setup.cfg....
[15:12:25] <sigmavirus24> ionelmc: "ok, cause sigmavirus24 confused me, he said that doesn't change" what did I say didn't change?
[15:12:57] <lifeless> qwcode: Ok, so there will be three ways to say 'setup.py depends on X'
[15:13:12] <lifeless> qwcode: right now there are two - setup(setup_requires) and README.txt.
[15:13:26] <lifeless> qwcode: and I run into the README.txt way fairly often.
[15:13:54] <lifeless> qwcode: e.g. anyone still using distutils!
[15:15:00] <ionelmc> dstufft: what's this `dist requires`? what's the difference to the setup requires?
[15:15:06] <dstufft> I personally feel pretty OK about the part of this change where it reads setup_requires from setup.cfg. I'm less sure about the part where it reads install_requires from setup.cfg too
[15:16:20] <dstufft> ionelmc: requires-dist == install_requires, it's runtime dependencies via setup.py invocation dependencies
[15:16:41] <ionelmc> dstufft: does the PR use egg_info to get the setup_requires from setup.cfg? or does it read it directly?
[15:16:50] <lifeless> ionelmc: it reads it directly.
[15:17:01] <qwcode> lifeless, this installs "requires-setup" into the install environment... doesn't setup_requires currently just drop dists in the cwd?
[15:17:02] <ionelmc> sounds good
[15:17:09] <lifeless> ionelmc: because you can't create egg_info if your setup_requires are not present.
[15:17:15] <dstufft> you can't use egg_info to get the setup_requires, because you can't invoke setup.py egg_info without first installing setup_requires
[15:17:26] <dstufft> setuptools does that by by installing them into .eggs in the curdir
[15:17:36] <dstufft> (and it does that implicitly)
[15:17:38] <ionelmc> should it use a different name for it tho? it creates confusion (you'd expect different behavior for setup_requires from setup.py)
[15:18:05] <lifeless> qwcode: it does. My reasoning for that was as follows: this is new, we can choose to be better, and folk that need no-pollution-of-runtime-etc should be using the build-wheels-and-install-them-path anyway
[15:18:22] <ionelmc> like, as ridiculous as it sounds, `pip_requires` - cause only pip supports this thing
[15:18:46] <dstufft> qwcode: How do you feel about the concept of reading setup_requires from setup.cfg? (ignoring all the other parts of this for right now)
[15:18:55] <ionelmc> as there's no clear standard for this, maybe it should be marked as pip-specific
[15:20:45] <qwcode> dstufft, ok I guess. it's certainly easier than 3 executions. I'd really like to hear jaraco get in on this, since we'd ideally like setuptools to adopt as well
[15:22:18] <dstufft> So there's two parts to a setuptools adoption
[15:22:34] <qwcode> dstufft, and feeling more ok with install-requires support too I think. but I'd really want to be clear for everyone in the docs how this is not PEP-free cowboy changes.... i.e. how it would all be ok with PEP426
[15:23:26] <dstufft> 1) when invoking easy_install, this could work the same way that pip works. easy_install reads from setup.cfg before invoking the setup.py and people can do non-lazy imports at the module scope of setup.py
[15:23:49] <dstufft> 2) When invoking ``setup.py <anything>`` without the setup_requires already installed, this can't work unless you do lazy imports
[15:23:56] <dstufft> but that's a per project decision
[15:24:09] <dstufft> they can decide if they care about #2 or not
[15:25:35] <qwcode> understood
[15:28:38] <qwcode> it's a possible slippery slope to support more things in this new "metadata" stanza...and then it starts getting confused with PEP426's metadata file... I understand the difference, but still that concerns me a bit
[15:29:55] <lifeless> dstufft: pushed a few changes to the PR, if you're reading it. docs and a little code style, nothing conceptually different.
[15:30:16] <dstufft> I'm summarzing the two open questions I see on the PR
[15:41:36] <lifeless> ok, I'm going to try this sleep thing again. Wish me luck.
[15:43:52] <dstufft> lifeless: night!
[15:45:53] <dstufft> https://github.com/pypa/pip/pull/2603#issuecomment-85567509 ~comments~
[19:59:24] <lifeless> dstufft: thanks
[20:07:46] <lifeless> dstufft: I probably relatedly need to implement the topological sort thing for deps, which is what I was going to ask you yesterday, but I realised I could hack around it with the simple fix for ordering.
[20:41:16] <dstufft> lifeless: there's an issue for topo sort somewhere...
[20:45:33] <lifeless> dstufft: yup
[20:46:04] <lifeless> dstufft: I think I'll need to implement that as a dep for this PR, because I've thought of a case I can make this break.
[20:46:28] <lifeless> dstufft: packages A, B, C. A i-r B, s-r C, B s-r C.
[20:46:51] <lifeless> we'll get to_install = reversed (A, C, B)
[20:46:58] <dstufft> yea
[20:47:09] <lifeless> if we switc the order we process deps, then that would work but a two-level dep would still break
[20:47:19] <lifeless> A ir- B,C. B and C both s-r D.
[20:47:40] <dstufft> unless the PR does the does the "install into temp location" thing which would work then too, but a topo sort is a good thing anyways
[20:48:00] <lifeless> I don't think temp location would fix that
[20:48:12] <lifeless> hmm, no you're right, it would
[20:48:21] <lifeless> just not for distros :)
[20:48:28] <lifeless> dstufft: anyhow, I've written a small essay on the PR
[20:49:25] <dstufft> lifeless: yea i see it, didn't get a chance to read it other than a skim real quick
[20:50:20] <lifeless> dstufft: well, I just put it up :)
[20:50:26] <lifeless> dstufft: so thats entirely reasonable.
[20:50:36] <lifeless> dstufft: from here I think - I'm going to write up the topo sort.
[20:50:52] <lifeless> dstufft: and start a targeted thread on the d2to1 compat question on the list.
[20:51:15] <lifeless> dstufft: how do we get hold of jason ?
[20:51:43] <dstufft> jaraco is often in here, though not atm, I pinged him on the issue, he's also on pypa-dev
[20:51:45] <lifeless> dstufft: [in case its not obvious I'm entirely happy to write up the needed setuptools patch]
[20:52:32] <sigmavirus24> lifeless: that was far from obvious =P
[20:53:38] <lifeless> sigmavirus24: doing setuptools first wouldn't have taught us as much :)
[22:37:47] <lifeless> dstufft: defaultdict is present on 2.6 right ?
[22:38:08] <dstufft> yea
[22:38:18] <sigmavirus24> lifeless: yes
[22:50:14] <lifeless> cool
[22:50:30] <lifeless> I'll wrap this topological sort up after dropping C and Lynne off at the airport
[22:50:46] <lifeless> I'm doing it on top of my setup_requires thing because that makes testing it a lot easier :)
[22:51:54] <lifeless> thoughts on moving this forward solicted though, since the code is written now ... :)