[15:02:41] roll call: blueness dberkholz dilfridge scarabeus ulm williamh [15:02:46] (or proxies) [15:03:01] -*- dilfridge here [15:03:49] -*- ulm here [15:03:57] i am still here [15:04:23] blueness, scarabeus, williamh? [15:05:16] scarabeus mentioned to me that he couldnt attend and was looking for a proxy [15:05:21] PMS makes people feel uneasy, it seems :) [15:05:31] williamh probably still missing wrt hardware issues? [15:05:32] creffett|irssi: if you have agreement with scarabeus you can proxy for him. [15:05:33] here [15:05:40] Tend to agree re williamh [15:05:48] rich0: no agreement, sorry [15:06:10] Ok, then scarabeus, williamh not here, rest present. Let the PMS fun begin. [15:06:18] whee [15:06:21] First topic - items for EAPI6 [15:06:35] Per ulm's suggestion we'll use the pools he recommened which I put in the agenda. [15:06:48] First: 1a-c [15:07:00] As found on: https://wiki.gentoo.org/wiki/Future_EAPI/EAPI_6_tentative_features [15:07:13] Any commentary before we vote? [15:07:26] edocs++, einstalldocs-- [15:07:47] rich0, one sec while i refresh my memory on those [15:07:48] Ok, let's chat about all, but we'll break up the vote. [15:08:22] oh, you're just talking about the function name [15:08:31] yep. [15:08:34] Just about everything on the list had some level of bikeshedding RE function names/etc. [15:08:47] yeah, not important. [15:08:48] ulm, i didn't fully understand IUSE_EFFECTIVE [15:08:50] I suggest we vote with regard to whether the feature is in/out, and not the specific implemetnation details unless critical. [15:08:57] I don't care about the names [15:09:15] The final PMS change will have to be voted on by the next council before adopted. [15:09:24] So they can do the bikeshedding. :) [15:09:30] blueness: it's equal to IUSE, plus some flags like "prefix" that are injected from profiles [15:09:30] hehe [15:09:40] i'm good with 1a-c [15:09:41] ulm, okay [15:09:46] vote? [15:09:47] i'm good with those then [15:09:49] blueness: so if you query if a flag can be used, it should be IUSE_EFF [15:09:51] Ok, let's vote. [15:10:06] -*- blueness yes to 1a-c [15:10:09] The council agrees to include 1a-c in EAPI6 [15:10:09] -*- ulm yes for 1a-c [15:10:12] -*- rich0 yes [15:10:14] -*- dilfridge yes for 1a-c [15:10:34] yes [15:10:36] Ok [15:10:39] Passed [15:10:47] Next, 2a-f [15:10:49] Discussion? [15:10:51] rich0, wait [15:10:55] (skipping 1d for now) [15:10:56] what about 1d? [15:10:59] oh okay! [15:11:10] (we're picking the fastest stuff to approve first) [15:11:11] -*- blueness shutsup [15:11:15] yes yes [15:11:17] nothing to say re 2a-f [15:11:27] AFAICS 2a-f should all be non-controversial [15:11:35] agree [15:11:43] 2f might be a problem no? [15:12:01] I don't see a problem for 2f [15:12:04] my concern there: will old unpack behavior be changed? [15:12:19] blueness: See comment 11 [15:12:31] lookin now to refresh mymemory [15:12:33] That seems like a good compromise [15:12:35] it doesn't help to do these early [15:12:54] Yeah, we're earning our pay on this agenda. :) [15:13:16] i'm okay with comment 11 three [15:13:18] there [15:13:25] actually [15:13:25] Ok, anything else on 2a-f? [15:13:27] i think that's critical for backwards compat [15:13:30] ulm: there is a small problem [15:13:30] -*- blueness done [15:13:38] unpack ./mame.zip [15:13:43] and similar usage in the tree [15:13:53] what happens there? [15:14:08] it takes the literal path no? [15:14:23] What does portage do today? [15:14:26] dilfridge: path contains a slash, so it's taken as is [15:14:30] no problem there [15:14:56] ok [15:14:57] I think we're ok [15:14:57] fine [15:15:01] ulm, dilfridge i assume unpack foo.zip and unpack ./foo.zip do the saem thine [15:15:02] so unpack ./mame.zip unpacks in current dir [15:15:03] thing [15:15:14] unpack mame.zip unpacks in DISTDIR [15:15:18] Well, unpack foo.zip would be in DISTDIR [15:15:25] ah yes [15:15:34] I'd assume unpack ./foo.zip would be current dir (likely in $S [15:15:36] so where is the "current dir" [15:15:41] in $S? [15:15:45] rich0: exactly [15:15:45] wherever you've switched to [15:16:16] ulm, we may hit a bug there, i suggest we grep the tree [15:16:18] ulm: is that current behavior? If so then no issues at all [15:16:18] anyway we're not changing retroactively [15:16:30] oh never mind, its not retro [15:16:31] so who cares if weird stuff is done [15:16:32] That is also true - this is a new EAPI, so fix your builds. [15:16:47] Just get rid of the ./ if it is meant to be DISTDIR [15:16:55] Or add it if you want it to be $S [15:16:58] okay devs will just have to watch it on bumping EAPI's [15:17:05] Ok, good to vote? [15:17:06] it's just the current behaviour for foo.zip and ./foo.zip [15:17:15] vote [15:17:23] vote [15:17:27] -*- rich0 yes for 2a-f [15:17:31] and adds that /some/path/foo.zip is handled too [15:17:35] -*- dilfridge yes for 2a-f [15:17:37] -*- ulm yes for 2a-f [15:17:46] -*- blueness yes [15:18:11] dberkholz ? [15:18:12] yes [15:18:15] ok, passed [15:18:23] Next, 3a-b [15:18:32] yes x100 [15:18:41] Bash stuff. Discussion? [15:18:56] bash 4.2 is overdue [15:18:56] separate votes [15:19:02] i'm very much in favor of 4.2 [15:19:13] cause 3b looks complicated :P [15:19:19] sure, we can vote separate - let's discuss together since related [15:19:22] and failglob will catch unintentional * in global scope [15:19:28] i had a protage helper bounced because i wrote it using associated arrays in bash only to find out that we're at bash3 [15:19:41] dilfridge, i'm glad you asked, i don't understand 3b fully [15:19:55] ulm, can you give us a simple example [15:20:22] blueness: https://bugs.gentoo.org/show_bug.cgi?id=463822 comment 0 [15:20:49] with failglob that will error out [15:21:01] so this is the issue -> unless user runs emerge from a directory where the glob matches some actual files and then hell breaks loose [15:21:14] while currently it may or may not work, depending on files in current dir [15:21:22] blueness: yup. Globbing can potentially change the behavior of the ebuild depending on environment. [15:21:36] with failglob that ebuild will always fail, so issue fixed before commiting. [15:21:43] so what exaclty is nullglob, what context does it live in, is it a bash thingy [15:22:09] nullglob will remove the word [15:22:23] if there are no matches, that is [15:22:35] That might or might not be caught during development. [15:22:43] yeah that's what i'm thinking rich [15:22:47] yeah that's what i'm thinking rich0 [15:23:02] It basically under-specifies a dependency, which causes no issues if you have it installed when testing it. [15:23:05] what about the other solution -> disable globbing completely in global scope and re-enable it in phase scope [15:23:14] blueness: that is the proposal [15:23:21] failglob in global scope [15:23:25] not in function scope [15:23:43] yep. I just dont know how much this affects eclasses. [15:23:59] Do we have eclasses globbing in global scope? [15:24:07] It is only an issue if they don't quote. [15:24:13] I'd think the fix is to just add quoting to the eclass. [15:24:17] dilfridge: there's not much going on in global scope in most eclasses [15:24:21] Which is better than leaving them as they are now. [15:24:43] it also won't affect eclasses for existing EAPIs [15:24:48] Also, this only is for EAPI6, so we'll spot that as ebuilds get ported. [15:24:51] ulm: could an eclass switch on these features "manually" again if needed? [15:24:52] ulm, there are variables set which could have globs [15:25:07] dilfridge: in global scope? no [15:25:10] (I mean, for the code within the eclass) [15:25:28] ulm: agree - how can you glob in global scope - you don't know what $PWD is. [15:25:32] the proposal is to leave things as is in function scope [15:26:06] ok I'll stop discussing since I'm not really getting much wiser :] [15:26:10] any unquoted * or [] in global scope qualifies as a bug IMHO [15:27:08] ulm, then have repoman catch it [15:27:39] blueness: that is the alternative, but why not just have bash assert it? [15:27:52] Why try to catch errors if we can prevent them? [15:28:33] ok the failglob just introduces an error exit and does not silently change other behaviour? [15:28:38] I don't see there being side-effects here, and it is EAPI6-only anyway. [15:28:42] blueness: I don't see any legitimate use case for globbing in global scope [15:28:48] dilfridge: yes [15:28:54] dilfridge: failglob should make the ebuild fail in all circumstances [15:29:02] ulm, i agree [15:29:05] whether the glob matches or not [15:29:36] okay i'm good with this, ulm convinced me. there is no reason to glob in the global context, so failglob in global [15:29:51] there *is* a reason to glob in local, so failglob in local functions [15:29:52] I look at it like an assert [15:29:56] yeah [15:30:04] okay i'm good [15:30:11] Ok, vote? [15:30:18] yes, please [15:30:23] -*- blueness thanks ulm for patiently explaining [15:30:42] vote: 3a-b (but 3b failglob in global scope only) [15:30:50] -*- rich0 yes [15:30:55] still incredibly huge fan of 3a (finally), and 3b is fine too [15:31:01] -*- dilfridge yes 3a-b [15:31:08] -*- ulm yes for 3a-b [15:31:17] -*- blueness yes [15:31:21] ok, passed :) [15:31:31] Now we have individuals... [15:31:34] 1d [15:31:48] PATCHES support in default src_prepare bug #463692 [15:31:50] rich0: https://bugs.gentoo.org/463692 "[Future EAPI] Provide PATCHES array support in default phase of src_prepare"; Gentoo Hosted Projects, PMS/EAPI; CONF; scarabeus:pms-bugs [15:32:18] I'm fine with it. Discussion? [15:32:29] this depends on 4a [15:32:30] ok let me say that the path-level automagic can lead to annoying bugs [15:32:44] Do we want to hit 4a first? [15:32:48] yep [15:32:53] rich0: makes more sense [15:32:56] rich0, i'm worried about the order that hte patches are done [15:33:00] ok let's do 4a first. agree [15:33:05] k [15:33:12] blueness: lexicographic order in C locale [15:33:18] Patch applying function in package manager bug #463768 [15:33:20] rich0: https://bugs.gentoo.org/463768 "[Future EAPI] Introduce patch applying function"; Gentoo Hosted Projects, PMS/EAPI; CONF; mgorny:pms-bugs [15:33:31] I put my two cents on the list. [15:33:47] I suggest defaulting to -p1, but allowing the specification of -p#, but no auto-detection [15:33:57] rich0: +1 [15:34:15] and directories in lexical order [15:34:18] yeah auto-detection bit me once [15:34:29] Basically comment 32 [15:34:29] rich0: +1 [15:34:43] rich0: however, if you need anything other than -p1 you'll have to call the function explicitly [15:34:57] rich0, are you sure aobut the lexi order? because if it a bash array we can control the oder by the order in which the patches are presetned [15:35:00] and then you could call epatch instead, as well [15:35:16] i don't particularly like making it more difficult or making more work for devs [15:35:24] blueness: that's just if the array contains a directory name [15:35:25] it might be annoying to have to rename patches to get the order right [15:35:33] blueness: lexicographical for patches inside some dir [15:35:39] blueness: lexi order is consistent with epatch bulk patching [15:35:49] Yeah - just for a directory. [15:35:50] otherwise, the order they are specified in [15:35:57] dilfridge, got it [15:36:04] If epatch took multiple arguments then obviously do them however passed. [15:36:09] That isn't in the bug though. [15:36:25] Actually, it says "files" so I guess that means multiple args. [15:36:29] dilfridge, ulm so a user can force an order by avoiding using a dir [15:36:38] yes, as I see it. [15:36:46] i can live with that [15:36:55] blueness: yup, or they could just glob in a dir and manipulate the list before passing or whatever [15:37:00] and all patches in a specified directory need to have the same path depth [15:37:07] dilfridge: ++ [15:37:16] I would advise against to much bikeshedding at this point [15:37:17] now, [15:37:18] let's first see how the implemetation goes, and then we can reconsider [15:37:21] ulm: agree [15:37:24] agreed [15:37:36] I just want to keep it simple so that this isn't a big production to build [15:37:44] This isn't the final PMS [15:38:01] Ok, so then here is my proposal: [15:38:03] i'm not particularly convinced this should be in pms at all [15:38:07] (implimentation and design simplicity are inversely proportional) [15:38:35] duplicating something that works pretty well with a less functional version that's harder to change just doesn't seem like a great idea [15:38:49] its in eutils.eclass no? [15:39:05] epatch, yes [15:39:12] To summarise again what has been discussed so far, the patch applying [15:39:12] function should support the following features: [15:39:12] - regular patch files - directories, with patches applied in lexical [15:39:12] order of their filenames, only files named *.diff and *.patch - either [15:39:12] way a) defaults to -p1 b) allows override to -p# [15:39:22] but if we want user patches we need it in the package manager [15:39:48] ugh - ugly [15:39:48] ulm, we have user patches now via /etc/portage/patches [15:40:19] blueness: which need eutils to be applied [15:41:04] I think the goal here is to enable PATCHES support and user-patches. [15:41:11] ulm, ah ues via user_patch [15:41:37] hmmm ... so is it good to globally add user_patch?? [15:41:57] s/ues/yes/ [15:41:58] blueness: well, that is also on our agenda. [15:42:14] If we want to discuss all patch-related items before voting I don't have an issue with it. [15:43:19] I'm in favor of 4a, 1d, and 4b, so I don't have an issue with 4a. But, 4a might not make much sense without 1d and 4b. [15:43:52] And 4b probably involves some bikeshedding. [15:43:58] rich0: right, so maybe we should vote on 1d and 4b only [15:44:12] and 4a is implied if one of them is accepted [15:44:51] Let's move on then. [15:44:55] 1d [15:45:26] PATCHES support in default src_prepare [15:45:26] bug #463692 [15:45:28] rich0: https://bugs.gentoo.org/463692 "[Future EAPI] Provide PATCHES array support in default phase of src_prepare"; Gentoo Hosted Projects, PMS/EAPI; CONF; scarabeus:pms-bugs [15:45:36] i'd prefer to see more things move out into eclasses from the core PM rather than vice versa. so i'm against it. [15:45:51] i think i'm with dberkholz here [15:46:20] 1d is in line with the recent trend to specify things via variables [15:46:26] I actually am looking at it from the standpoint that the more you move into environment the better. [15:46:29] instead of functional coding [15:46:31] i like the idea of 4b - user_patches, but not of duplicating eutils.eclass functionality [15:46:39] that doesnt make sense if we want to globally accept user patches [15:46:58] Look at systemd units vs openrc scripts. [15:47:01] -*- rich0 ducks [15:47:06] ulm: yeah, which i also dislike. but PATCHES is so generally accepted that i don't really see it as a change there. [15:47:13] Tell the PM what to do, not how to do it. [15:48:23] I've nothing more to say about 1d [15:48:43] Ok, do we want to discuss further? [15:49:00] I'm all for "less side-effects" so I'm generally in favor of 1d. [15:50:32] Ok, I'm not hearing more discussion [15:50:35] Do we just vote? [15:50:40] sure [15:50:49] Ok, let's vote for 1d alone [15:50:51] -*- rich0 yes [15:50:55] -*- ulm 1d abstain [15:50:58] no [15:51:02] -*- dilfridge yes [15:51:11] -*- blueness no [15:51:22] Ok, that leaves us 2-2 with one abstain [15:51:32] ulm, care to tiebreak, or else it is defeated. [15:51:51] rich0: let it be defeated then [15:51:56] ok, 1d is out. [15:52:08] 4b - user patches [15:52:22] This one might get some bikeshedding [15:52:29] I'm in favor of it, though there are a few ways it could go [15:52:33] fwiw i've gotta run in 10 minutes, but i'll leave my votes behind. [15:52:49] Ok, before we discuss [15:53:01] Do we want to plan on same bat time, same bat channel next week? [15:53:19] rich0: fine with me [15:53:23] yeah [15:53:28] wfm [15:53:42] Ok, then let's discuss until 4, and then we can avoid further votes and let this die out after 4b [15:53:52] i'm okay with jun 17 @ this time [15:54:25] So, I'm fine with either having ebuilds call euserpatch or whatever in src_prepare(), or adding a new phase function to apply user patches. [15:54:51] But if we do the latter we need a prepare, userpatch, configure step [15:54:54] in principle I like the concept, but getting it "right" is not easy [15:55:12] I think that calling euserpatch is the lesser evil, despite what I said earlier about what vs how. [15:55:45] Or apply_user_patches or whatever [15:55:58] I'd be opposed against any additional phase functions [15:56:10] the feature isn't important enough for that [15:56:19] ulm: I don't like the additional functions either - not my first preference. [15:56:29] I think this feature actually is important. It is VERY useful. [15:56:30] i just added an entry to the google calendar [15:56:40] However, I'm not sure adding multiple phases just to implement it is necessary. [15:56:57] _if_ we accept it, just add it to default_src_prepare, and have ebuilds/eclasses call it from src_prepare [15:57:05] ulm: ++ [15:57:19] I think that is the simplest solution, as much as some might complain about the need to call it [15:57:43] rich0: more will complain about automatic calling that can't be disabled [15:58:00] this still means we're adding a weird custom patch function to the PM, which i dislike. [15:58:00] I don't patch stuff often, but when I do it is WAY nicer to have user-patches than to hack away at things with the ebuild command. [15:58:06] e.g. in virtuals you won't want it [15:58:20] What is "custom" about it? [15:58:33] ulm: good point [15:58:46] is the PM going to call out to epatch in the eclass? [15:58:57] dberkholz, i don't get your reasoning, rich0 said it for me "it is WAY nicer to have user-patches than to hack away at things with the ebuild command" [15:59:01] dberkholz: probably not - we'd need 4a to do it. [15:59:05] well, I definitely would not want to add the full current epatch to the pm, but a simpler variant should be ok, since patching is pretty central to our stuff [15:59:09] and 4a is what i hate [15:59:19] user patches would be -p1 only [15:59:25] <_AxS_> ulm: rich0: if epatch_user's new equiv is added to default src_prepare on its own, what about the case where build systems get patched and need to be regen'ed ? do we leave that to the end-user to figure out or will this function need smarts in order to either (a) accomodate or (b) warn? [15:59:45] the PATCHES array is what everyone working with kde / cmake loooves [15:59:48] this whole "let's add a worse, less flexible patch function that's harder to change and then keep a more functional duplicate version in the tree" just seems awful [16:00:13] dberkholz, hmmm ... [16:00:21] rich0, can we table this one for next week [16:00:27] _AxS_: there's no way of adding eautoreconf to an ebuild where it's not provided already [16:00:28] dberkholz: how else would you propose doing user patches, or do we just not do it? [16:00:37] blueness: we're going to table voting regardless [16:00:46] rich0, okay, so just discussion [16:00:48] So we can discuss a bit longer or break as we see fit [16:00:52] _AxS_: unless you want to inherit autotools everywhere [16:00:55] -*- blueness needs time to think [16:01:18] We're at 4 - so I'll officially call the meeting, to convene next week. We can continue to chat until we get tired of it, and discuss on lists/etc as necessary before next week. [16:01:19] <_AxS_> ulm: true, and i expect logic to determine if configure.ac / any-other-build-system-file-needing-preparation is modified would be overly complicated too, to trigger an ewarn/eerror/etc [16:01:29] Err, 20:00 [16:01:32] rich0: if that's the cost, i don't want to pay it [16:01:48] one option i keep toying with is whether we could move default phase functions out into the tree [16:02:01] well, there is a reason why this was rejected from EAPI 5 already ;) [16:02:16] but not sure how feasible it is, and obviously it means anyone not based on gentoo-x86 would need a copy [16:03:41] anyway, gotta run. [16:03:45] <_AxS_> dberkholz: ? you mean, revive base.eclass and implement there? [16:04:05] dberkholz: honestly, in my ideal word you'd be able to express an ebuild without anything other than a variable assignment, or in xml/whatever. We'd never get that far, but that is the direction I'd prefer. [16:04:11] More declarative, less imperitive. [16:04:32] Ok, all who want to keep chatting are welcome to do so - open floor on this. [16:04:44] To the rest, thanks - we covered a lot! [16:04:58] I'll take care of log/summary, including subsequent discussion. [16:05:33] Cheers for cheering, err chairing :) [16:05:42] I might start a thread on the whole eclass vs PMS issue. That alone is worth some input. [16:06:11] rich0: ebuilds in xml? I thought we were past that mistake [16:06:21] ulm: has it been done? [16:06:26] it was called zynot [16:06:42] google for it ;) [16:07:05] I didn't realize they used xml packages. [16:07:43] I posted ages back (during the whole EAPI extension debate) that I do think we should be able to have a way to get rid of the ebuild==bash thing, but I'm not in any rush to get there. [16:08:07] CGI for the PM. :) [16:08:41] emerge [16:09:02] that's called an app store ;) [16:09:45] So, anything else to discuss here? I think a lot of this comes down to philosophy. I just see user_patches as incredibly useful and really a potential distinctive feature for a source-based distro. [16:10:01] If I were selling Gentoo, it would be something I'd want on my features list. [16:10:19] rich0, what about next years election, is someone on that? [16:10:27] I can't see floating this on gentoo-user and getting a lot of, "no, I don't care if Gentoo makes it easier for me to patch stuff without forking an ebuild." [16:10:40] blueness: I'll ping them. I know they know, but somebody has to do it. [16:10:51] It is time to start nominations. [16:11:02] rich0, the user_epatch is more than just users patching [16:11:18] there are lots of patches for uclibc and musl that are unlikely to get into the tree [16:11:25] jmbsvicetto: ^^^ [16:11:36] so i put them in /etc/portage/patches during stage builds [16:11:51] not uclibc anymore which is purely gentoo tree now after some work [16:12:11] blueness: that makes me wonder if official patchsets controlled by something USE-like might be a later extension of this [16:12:30] yeah i can see that [16:12:40] openssh has USE=hpn by default [16:12:56] Might be better to use USE for enable/disable/etc and something else for patches. [16:14:02] <_AxS_> rich0: i agree with you that user_patches is useful, but we need to make it work for all cases for it to continue to be useful. if the patch touches configure.ac we can't leave users hanging to figure out why their patch didn't work properly, and end up having to overlay the ebuild anyhow... [16:14:37] <_AxS_> *OR*, we do have that, and make it very clear that if a patch modifies the build system then it need to result in overlaying. and e(qa)warn appropriately. [16:14:46] Good point. [16:14:57] We need to either not guarantee that you can patch the build system. [16:15:13] Or we need to specify that ebuild authors always have to reconfigure the build system if appropriate. [16:15:24] I don't see how we can do that in the default function, since not all is autotools/etc. [16:15:32] -*- _AxS_ is leaning to the latter, since a build system patch that adds features will probably need some src_configure additions too [16:16:12] Maybe we should just rule out build-system changes? [16:16:30] If I were doing agile I'd say that we'd do that in the next sprint. :) [16:16:50] How often do people really want to change the build system? [16:16:59] I can't really see using user patches for huge patch sets. [16:17:17] If you're going to fork upstream, just fork it. [16:17:39] <_AxS_> rich0: well, most of my patches end up being build system related, but as a dev i guess that's where i tend to look to make changes... [16:19:36] true, I never really thought of this as a way to test out ebuild fixes/etc. [16:19:44] But as a dev you can always fix the ebuild to reconfigure/etc. [16:20:18] I think this feature needs a bit more work to lay out expectations. [16:20:46] It isn't enough to tell everybody to call the new function. You have to lay out what they need to accomodate in terms of patch impact. [16:21:21] -*- _AxS_ nods .. we already have epatch_user in place and a lot of packages -have- adopted that. but to get full coverage.... [16:22:17] The question is whether all ebuilds that call apply_user_patches or whatever re-configure after doing so. [16:22:26] epatch_user is a good example for a quick hack that has outgrown its purpose [16:22:28] If the package didn't otherwise need to fix autotools, then it might lack that step. [16:22:47] it was just a hack, added to eutils without much design [16:22:51] ulm: agree, but the fact that it is so darn useful makes me want to come up with the real solution [16:23:46] there cannot be a perfect solution [16:24:03] some patches inevitably require other changes to the ebuild [16:24:10] ulm: the story of the project I'm working on when I'm not in council meetings... [16:24:33] e.g. addition of features will often require additional dependencies [16:24:37] or USE flags [16:26:23] brb [16:33:17] ulm: I need disappear myself. Let's bikeshed this on-list and see if we can get it to a workable state. I'd be interested in what features the community wants. No need to over-do this.