21:00:01 <ignatenkobrain> #startmeeting Rust SIG (2017-03-15)
21:00:01 <zodbot> Meeting started Wed Mar 15 21:00:01 2017 UTC.  The chair is ignatenkobrain. Information about MeetBot at http://wiki.debian.org/MeetBot.
21:00:01 <zodbot> Useful Commands: #action #agreed #halp #info #idea #link #topic.
21:00:01 <zodbot> The meeting name has been set to 'rust_sig_(2017-03-15)'
21:00:08 <ignatenkobrain> #meetingname rust-sig
21:00:08 <zodbot> The meeting name has been set to 'rust-sig'
21:00:12 <ignatenkobrain> #chair ignatenkobrain jistone
21:00:12 <zodbot> Current chairs: ignatenkobrain jistone
21:00:15 <ignatenkobrain> #topic Agenda
21:00:19 <ignatenkobrain> #link https://docs.pagure.org/fedora-rust.sig/meetings/2017-03-15.html
21:00:22 <ignatenkobrain> #info (1) Roll Call
21:00:25 <ignatenkobrain> #info (2) Packaging Guidelines
21:00:28 <ignatenkobrain> #info (3) State of affairs and future plans
21:00:30 <ignatenkobrain> #info (4) Open Floor
21:00:33 <ignatenkobrain> #topic Roll Call
21:00:38 <ignatenkobrain> .hello ignatenkobrain
21:00:39 <zodbot> ignatenkobrain: ignatenkobrain 'Igor Gnatenko' <ignatenko@redhat.com>
21:00:40 <jistone> .hello jistone
21:00:40 <Pharaoh_Atem> .hello
21:00:42 <zodbot> Pharaoh_Atem: (hello <an alias, 1 argument>) -- Alias for "hellomynameis $1".
21:00:44 <zodbot> jistone: jistone 'Josh Stone' <jistone@redhat.com>
21:00:46 <Pharaoh_Atem> .hello ngompa
21:00:50 <zodbot> Pharaoh_Atem: ngompa 'Neal Gompa' <ngompa13@gmail.com>
21:00:51 <mich181189> .hellp mich181189
21:00:57 <ignatenkobrain> mich181189: hellp? :D
21:00:58 <mich181189> .hello mich181189
21:00:59 <zodbot> mich181189: mich181189 'Michael Cullen' <michael@cullen-online.com>
21:01:08 <mich181189> hellps if I can spell!
21:01:08 <Akien> .hello akien
21:01:09 <zodbot> Akien: akien 'Rémi Verschelde' <rverschelde@gmail.com>
21:01:31 <ignatenkobrain> #topic Packaging Guidelines
21:01:36 <ignatenkobrain> #link https://pagure.io/fedora-rust/sig/pull-request/9
21:01:43 <ignatenkobrain> this is from last week
21:01:55 <ignatenkobrain> I think I addressed issues
21:02:12 <ignatenkobrain> ohh, probably not BuildRequires =(
21:04:09 <jistone> ok, are there questions about that?
21:04:43 <ignatenkobrain> I think it's just minor to make it as subsection and provide example
21:04:51 <ignatenkobrain> any other points?
21:05:01 <ignatenkobrain> btw, I added rust- prefix in current packages
21:05:04 <ignatenkobrain> everywhere
21:05:13 <ignatenkobrain> and fixed rust2rpm to generate proper names
21:05:20 <Akien> Sounds good.
21:05:35 <mich181189> cool
21:05:37 <Pharaoh_Atem> the current proposed structure looks good to me
21:05:51 <jistone> "Packagers **MUST** use ``with`` rich dependency operator"
21:06:08 <jistone> I still would like to try the "poor" alternative
21:06:17 <ignatenkobrain> jistone: yeah, let's talk about this in next topic =)
21:06:35 <ignatenkobrain> "poor" would not be in upstream guidelines, but fedora ones
21:07:13 <jistone> what does upstream mean here?  the nebulous collection of rpm distros?
21:07:16 <Pharaoh_Atem> yes
21:07:49 <Pharaoh_Atem> and even for downstream Fedora, I'd like to ensure that packages can easily transition to the correct form
21:07:56 <ignatenkobrain> jistone: upstream == proper (the fedora-rust on pagure)
21:08:25 <ignatenkobrain> #action ignatenkobrain to make BuildRequires as sub-section and add example
21:08:28 <luke_nukem> Hi all. Bit late due to system issues (nvidia, 4.10 kernel)
21:08:40 <Pharaoh_Atem> hey Luke
21:08:50 <ignatenkobrain> Pharaoh_Atem: jistone: I don't have any updates on releng view at this moment =(
21:09:03 <jistone> I guess it just seems weird to say MUST for something that doesn't even work anywhere (yet)
21:09:13 <ignatenkobrain> jistone: it does work
21:09:18 <ignatenkobrain> how did I built 100+ packages? :P
21:09:21 <jistone> not in any distro, I mean
21:09:39 <Pharaoh_Atem> well, we haven't proposed guidelines to include in the monolith of packaging guidelines yet for a reason
21:09:43 <jistone> not many people run ignatenkobrain-OS
21:10:01 <ignatenkobrain> jistone: you don't need special OS, there's repo with everything what you need ;)
21:10:13 <jistone> you get my point
21:10:23 <ignatenkobrain> but let's discuss this after in next topic (after good news)
21:10:43 <ignatenkobrain> #topic State of affairs and future plans
21:11:08 <ignatenkobrain> #info ripgrep has been updated to 0.5.0 🕺
21:11:14 <ignatenkobrain> #info "Target RPM" feature has been tested on COPR dev instance, a bit more work is needed to get in prod
21:11:20 <ignatenkobrain> #info libdnf and dnf-plugins-core patches were merged upstream
21:12:17 <ignatenkobrain> so, only 2 patches are now needed (rpm and libsolv)
21:12:21 <ignatenkobrain> libsolv patch is oneliner
21:12:30 <jistone> oh, that's an emoji! pagure shows junk in there like 🕺
21:12:33 <Pharaoh_Atem> and what about the rpm patch?
21:12:34 <jistone> :)
21:12:50 <ignatenkobrain> yeah, that's why it took me time to copy it from terminal ;)
21:13:19 * ignatenkobrain should report bug against pagure
21:13:31 <ignatenkobrain> Pharaoh_Atem: about RPM patch, I don't think there are any news
21:13:39 <ignatenkobrain> Florian didn't wrote full patch yet
21:14:03 <ignatenkobrain> but I have all test-cases prepared
21:14:13 <Pharaoh_Atem> that's this, right? https://github.com/rpm-software-management/rpm/pull/164
21:14:30 <ignatenkobrain> https://github.com/rpm-software-management/rpm/pull/164/commits/45777d2ebf98ff2d3831c33fbfbfe900b1c2dc92
21:14:37 <ignatenkobrain> yeah, this one is initial draft
21:15:27 <Pharaoh_Atem> will Florian be able to work on this anytime soon?
21:15:28 <ignatenkobrain> so, what are the plans/targets?
21:15:36 <ignatenkobrain> Pharaoh_Atem: yes, it's still planned for 4.14
21:16:47 <ignatenkobrain> should we try to package something bigger or start working more on integrating in distro or ... ?
21:17:07 <ignatenkobrain> multiple things in parallel?
21:17:08 <Pharaoh_Atem> I think we should work on getting downstream distro integration going first
21:17:29 <Pharaoh_Atem> we can certainly keep packaging things, but it's going to be hard to really progress without the integration work done
21:17:37 <jistone> yeah, I think "100+ packages" is plenty proof of concept :)
21:18:00 <Pharaoh_Atem> we're already going to make tons of reviewers sad when the deluge of rust packages hits the review queue :)
21:18:15 <jistone> isn't that part of what a SIG is for?
21:18:21 <Pharaoh_Atem> yes
21:18:22 <jistone> so we review Rust packages ourselves?
21:18:27 <ignatenkobrain> yeah :D
21:18:30 <Pharaoh_Atem> yep :P
21:18:48 <mich181189> s/sad/busy/ :-P
21:19:56 <ignatenkobrain> #info we need to start working on integration into distros
21:20:06 <mich181189> I wonder how long it will take for someone to complain about the static libs...
21:20:09 <ignatenkobrain> let's get back to the topic
21:20:33 <ignatenkobrain> jistone: if we want it now, there's no other option apart from adding that bunch of provides and so on
21:20:34 <jistone> mich181189, I've handled such complaints already, before we even had rustc
21:20:42 <luke_nukem> ignatenkobrain: what does the integration need?
21:21:05 <Pharaoh_Atem> luke_nukem: on your side (openSUSE), the main thing is that you'll need rpm, libsolv, and libzypp patches
21:21:11 <Pharaoh_Atem> and perl-BSSolv patches
21:21:15 <jistone> luke_nukem, given there aren't proper rich deps, or not "with", for now we have to figure out a fallback
21:21:22 <ignatenkobrain> yeah
21:21:29 <luke_nukem> Ah, that sort of integration.
21:21:45 <ignatenkobrain> jistone: main point about that hackish stuff is how to handle >=0.1,<0.4
21:21:59 <jistone> in your 100+, did anything need that?
21:22:05 <ignatenkobrain> jistone: 3-5 packages
21:22:20 <mich181189> given most rust deps seem to be advisory (I've only had to make code changes on one package to change versions and it was a couple of years of upgrade) and given it's build-time only, does it even matter that much?
21:22:27 <jistone> hmm, I know num's serde dep is like that, actually
21:22:56 <ignatenkobrain> probably we should just take first and use it
21:23:04 <ignatenkobrain> i.e. only Req: foo >=0.1
21:23:20 <ignatenkobrain> and then if someone complains -- they go to releng and implement support for rich deps
21:23:38 <Pharaoh_Atem> for legacy, we can fall back to Req >= + Req <
21:23:58 <Pharaoh_Atem> the worst thing that happens is that too many things get installed
21:24:03 <jistone> or bump it to the newest we can, foo >=0.1,<0.4 -> crate(foo-0.3) >= 0.1
21:24:11 <ignatenkobrain> jistone: manually?
21:24:26 <jistone> in theory, that could be automatic
21:24:31 <ignatenkobrain> nope
21:24:45 <ignatenkobrain> well, only if you have 2
21:24:51 <ignatenkobrain> otherwise parsing gets very complicated
21:24:53 <Pharaoh_Atem> jistone: it can't because something has to make the decision on how the versioning construct should look
21:25:05 <jistone> ok
21:25:05 <Pharaoh_Atem> and depending on how wide the net is, that could get really screwy
21:25:06 <ignatenkobrain> because you need to find highest bound
21:25:43 <jistone> "we can fall back to Req >= + Req <"
21:25:45 <Pharaoh_Atem> ignatenkobrain, jistone: my suggestion for "legacy" behavior is just do Req >= + Req <
21:25:48 <jistone> is that workable?
21:25:59 <jistone> then fine
21:26:14 <ignatenkobrain> jistone: sometimes that will pull 2 dependencies which is below range and above :D
21:26:14 <Pharaoh_Atem> it's a good short-term plan, as long as we ignore feature deps
21:26:24 <ignatenkobrain> but will not pull dep in the middle
21:26:38 <Pharaoh_Atem> because feature deps will require rich deps
21:27:05 <ignatenkobrain> so I think just doing Req: >= is workable
21:27:05 <Pharaoh_Atem> I fully expect that we wouldn't be packaging things this way for very long in Fedora
21:27:16 <ignatenkobrain> at least something will be pulled in
21:27:42 <jistone> hopefully we would have such a wide spread of versions to miss the middle that's actually wanted
21:28:16 <Pharaoh_Atem> though, given the experience of what happens in golang, I think it's not very likely that we'll package libraries for EPEL7
21:28:19 <jistone> "at least something will be pulled in" doesn't help if it doesn't support the latest
21:28:20 <ignatenkobrain> I'm fine with having multiple reqs as well. just don't want to be the one who will be fixing it :)
21:28:28 <Pharaoh_Atem> they get removed too often :/
21:28:54 <Pharaoh_Atem> I expect to see rust and cargo move out of EPEL and into RHEL proper this year
21:28:58 <Pharaoh_Atem> or maybe next year
21:29:09 <ignatenkobrain> who volunteers to do work on Req+Req in rust2rpm?
21:29:20 <ignatenkobrain> aand genegaring multiple provides
21:29:29 <jistone> Pharaoh_Atem, we've made no such commitment for RHEL
21:29:31 <ignatenkobrain> basically, implementing "legacy" mode
21:29:34 <Pharaoh_Atem> don't we already generate the provides?
21:29:46 <ignatenkobrain> Pharaoh_Atem: we generate only crate(x)
21:29:48 <Pharaoh_Atem> jistone: when the next ESR after 52 hits, it'll get pulled in
21:30:06 <ignatenkobrain> but not crate(x) + crate(x-0) + crate(x-0.1) + crate(x-0.1.0)
21:30:25 <ignatenkobrain> because based on those provides we can generate ranges
21:30:26 <jistone> Pharaoh_Atem, doesn't mean you'll see it
21:30:33 <ignatenkobrain> or wait
21:30:34 <ignatenkobrain> hmm
21:30:46 <ignatenkobrain> yeah, you don't need provides
21:30:49 <ignatenkobrain> only requires
21:31:26 <jistone> how?
21:31:41 <jistone> you only want version ranges for everything?
21:31:54 <ignatenkobrain> now I'm completely lost
21:32:04 <mich181189> I was lost a long time ago
21:32:05 <ignatenkobrain> let's agree how it should look like
21:32:06 <jistone> why don't we need semver provides?
21:32:22 <ignatenkobrain> ~0.1.80
21:32:26 <ignatenkobrain> how this will look like?
21:32:41 <jistone> crate(foo-0.1) >= 0.1.80
21:33:22 <ignatenkobrain> okay, ^2.21 ?
21:33:38 <jistone> crate(foo-2) >= 2.21
21:33:45 <ignatenkobrain> Pharaoh_Atem: ^^
21:34:26 <jistone> and something would provide both crate(foo-2) and crate(foo-2.21)
21:34:31 <jistone> (or newer for the latter)
21:35:00 * ignatenkobrain is still looking for volunteer :P
21:35:39 <luke_nukem> ignatenkobrain: Err, volunteer for what?
21:35:49 <jistone> making that work :)
21:35:54 <ignatenkobrain> luke_nukem: to implement this generator in rust2rpm
21:35:58 <luke_nukem> Sorry, trying to keep track while in class :)
21:36:14 <jistone> I probably should volunteer ... right after I do the other items I haven't touched... :/
21:36:16 <jistone> sorry
21:36:38 <luke_nukem> ignatenkobrain: Ah, I'll add that to my "todo.txt" and have a look soon (day or so)
21:36:48 * ignatenkobrain is not in rush, he is perfectly happy with playground repo :D
21:36:49 <jistone> how about, I volunteer to file an issue, with examples
21:37:23 <ignatenkobrain> #action jistone to file issue about "legacy" mode with examples
21:37:48 <luke_nukem> Cool
21:38:06 <ignatenkobrain> do we have some other target?
21:38:19 <luke_nukem> Hmm, I like the idea of using semver rather than >= + <
21:38:37 <ignatenkobrain> e.g. to re-bootstrap cargo with natively-packaged deps? :P
21:38:42 <ignatenkobrain> jistone: ^^
21:38:48 <Akien> That would be nice indeed.
21:39:34 <jistone> basically, dropping the cargo-vendor tarball
21:39:39 <ignatenkobrain> or... are there some other useful tools like ripgrep?
21:39:42 <ignatenkobrain> jistone: yeah
21:40:13 <jistone> a lot of other things that I 'cargo install' are cargo addons
21:40:21 <jistone> which probably want cargo as a crate themselves
21:40:44 <jistone> do you have rustfmt?
21:41:07 <ignatenkobrain> I do have
21:41:26 <ignatenkobrain> I think I even ported it to newer versions of libs :P
21:41:50 <ignatenkobrain> jistone: https://github.com/rust-lang-nursery/rustfmt/commits/master?author=ignatenkobrain
21:42:00 <jistone> cool
21:42:52 <ignatenkobrain> talking about cargo...
21:43:02 <luke_nukem> Quick question about packaging rustc itself - have you experienced circular building with rust requiring cargo whcih requires rust?
21:43:05 <ignatenkobrain> I think only 1-2 top-level deps are missing
21:43:28 <ignatenkobrain> which means 4-5 deps in total are missing
21:43:44 <ignatenkobrain> so we're pretty much have everything in place to try it out
21:44:16 <jistone> luke_nukem, that's only a problem for bootstrap under rustbuild
21:45:13 <jistone> (1) build rust with upstream rust+cargo  (2) build cargo with local rust and upstream cargo  (3) build rust locally  (4) build cargo locally
21:46:10 <luke_nukem> jistone: I think it may be more to do with how OBS is working at the moment, if either cargo or rust builds, then it triggers a rebuild of the other - infinite loop :-|
21:46:20 <jistone> ignatenkobrain, if you look at cargo.spec, you can see where I unpack the vendor and setup a .cargo/config
21:46:26 <jistone> luke_nukem, cute
21:47:00 <jistone> luke_nukem, we have koschei to attempt rebuilds, but that doesn't go in the buildroot, so they don't end up triggering each other
21:47:15 <luke_nukem> Hmm..
21:47:39 <luke_nukem> I need to duck out early - next class. Thanks all - will be in the usual channels.
21:47:56 <jistone> ignatenkobrain, I think it wouldn't be hard to make cargo.spec conditionally point to the system repo instead
21:48:10 <ignatenkobrain> jistone: should not be hard I suppose
21:48:13 <ignatenkobrain> it's still same
21:48:14 <ignatenkobrain> %cargo_prep
21:48:39 <Pharaoh_Atem> the actual problem is that he has bootstrap and real package as separate specs
21:48:48 <Pharaoh_Atem> OBS cycles back and forth until all conditions are satisfied
21:48:49 <ignatenkobrain> rust -> cargo -> rust-rpm-macros -> rust -> cargo -> deps -> cargo
21:48:52 <ignatenkobrain> ? ;)
21:50:04 <ignatenkobrain> note that we're slowly running out of time (we have 10 mins)
21:50:27 <ignatenkobrain> jistone: should I finish remaining crates and try cargo rebuild?
21:50:39 <jistone> (and it's good practice to try and end a little early)
21:51:00 <jistone> ignatenkobrain, sounds like a good next step
21:51:33 <ignatenkobrain> #action ignatenkobrain to package remaining cargo deps and try re-bootstrap using system libraries
21:51:44 <ignatenkobrain> some other useful tools?
21:51:58 <jistone> maybe xi?  https://github.com/google/xi-editor
21:52:24 <Pharaoh_Atem> oh boy
21:52:26 <Pharaoh_Atem> gtk-rs
21:52:41 <Pharaoh_Atem> oh wait
21:52:47 <Pharaoh_Atem> nope, gtk frontend is written in Vala
21:52:59 <ignatenkobrain> google.. rust..
21:53:08 <Pharaoh_Atem> Google does ALL the things
21:53:10 <ignatenkobrain> breaking templates
21:53:20 <jistone> maybe librsvg2 2.41 though, that needs gtk-rs
21:53:50 <jistone> "This is not an official Google product (experimental or otherwise), it is just code that happens to be owned by Google."
21:54:02 <Pharaoh_Atem> one of those 20% projects, I guess
21:54:06 <jistone> yeah
21:54:18 <ignatenkobrain> librsvg2 sounds fun
21:54:33 <Pharaoh_Atem> gtk-rs is quite a lot of stuff, though
21:54:56 <ignatenkobrain> okay, sounds like a plan for week at least
21:54:58 <Pharaoh_Atem> though doing those opens up nice things like systemd-manager
21:55:05 <Pharaoh_Atem> https://github.com/mmstick/systemd-manager
21:55:20 <jistone> wat
21:55:25 <jistone> that one is new to me
21:55:52 <Pharaoh_Atem> !!!
21:56:00 <Pharaoh_Atem> this guy wrote a cargo subcommand to generate debs: https://github.com/mmstick/cargo-deb
21:56:30 <jistone> well there's debcargo now too
21:56:43 <Pharaoh_Atem> is there nothing on the rpm side?
21:56:47 <jistone> that's us
21:57:09 <jistone> rust2rpm
21:57:20 <jistone> it just happens to be written in python
21:57:23 * jistone shrugs
21:57:24 <jistone> :)
21:57:31 <Pharaoh_Atem> heh
21:57:39 <ignatenkobrain> #topic Open Floor
21:57:50 <ignatenkobrain> jistone: time to rewrite rust2rpm in rust? ;)
21:58:00 <jistone> rust 1.16 comes out tomorrow
21:58:15 <ignatenkobrain> jistone: use #info
21:58:22 <jistone> #info rust 1.16 comes out tomorrow
21:58:29 <ignatenkobrain> aha =)
21:58:37 <mich181189> ignatenkobrain: that thought had occurred to me
21:59:10 <ignatenkobrain> mich181189: it will make bootstrap procedure too complicated
21:59:22 <ignatenkobrain> s/too /
21:59:29 <ignatenkobrain> s/too //
21:59:40 <ignatenkobrain> anyway, let's try to squash in 1 hour
21:59:43 <mich181189> yeah... but given the spec file is almost the starting point...
21:59:44 <ignatenkobrain> at least once :D
21:59:48 <mich181189> :-)
22:00:12 <ignatenkobrain> #endmeeting