=== yofel_ is now known as yofel [09:01] Good morning! === rodrigo__ is now known as rodrigo_ [10:26] Hi all [11:05] hello everyone! [11:13] o/ [11:34] ralsina: ping [11:38] gatox: ping [11:39] nessita, pong [11:39] gatox: hi there! question [11:40] nessita, shoot [11:40] gatox: last week I made a review for you where we skipped a whole testcase because it was using the real control panel. I think you told me you were gonna fix that next, but I'm not sure. Can you please confirm? [11:41] nessita, yes, ralsina told me that he has to implement all that test from scratch [11:41] nessita, it was local_folders [11:42] gatox: what are you working on today? it may be a good exercise for you to do that ;-) [11:42] nessita, i'm working on this: https://bugs.launchpad.net/ubuntuone-windows-installer/+bug/820874 [11:42] gatox: Error: Bug #820874 is private. [11:42] * nessita looks [11:42] gatox: do you have an ETA for that? [11:44] nessita, i think it can be done for 12ART... code complete for sure... tests is another story :P [11:44] gatox: -.- [11:45] gatox: code complete means with tests. Ideally before writing the code... [11:45] gatox: so, when you're asked for an estimates, always always include the tests [11:45] nessita, i mean, i usually spend more time writing tests and fixing when are some changes... [11:45] nessita, ok.... probably it will be ready for lunch [11:46] :P [11:46] gatox: ok, so, can you please take over the fixing tests after completing that task? [11:46] nessita, OK! [11:47] gatox: great! (unless you had something else in your plate... in that case let me know and we evaluate priorities) [11:47] nessita, no, i think that fixing those test should be done before the other bugs that are not so critical [11:48] gatox: GREAT! we're in sync then [12:17] gatox: sso branch approver and globally approved, moving to windows-installer [12:17] nessita, awesome! [12:19] gatox: so, I'm not sure you're adding a test for the removal of the form errors widget. I'm talking this line added in next(): [12:19] self.currentPage().layout().removeWidget(self.form_errors_label) [12:20] nessita, yes, not directly... but that line is executed on "next" for each page that it's called a lot in the tests... but let me add some tests for that [12:23] gatox: yes please, let me explain why is necessary: from the user point of view, is important that the form-error message is cleared, once the error is "resolved" (either by retrying or moving forward) [12:24] nessita, yes, i'm writing some tests tocheck that now every time next() is called in test_gui [12:24] gatox: great [12:24] nessita: i'm sure you asked me for a review, but i've lost the link [12:24] nessita: now would be a good time [12:25] Chipaca: https://code.launchpad.net/~nataliabidart/ubuntuone-client/platform-details/+merge/71723 [12:25] Chipaca: context: we're adding platform details to the ping url in the u1client side. The moving of credentials into its own module is caused by a nightmare of cicurlar imports between code outside platform and code inside there [12:26] nessita, gatox: good morning, and I have that test case redone in this branch: lp:~ralsina/ubuntuone-windows-installer/local-folder-fixes [12:26] ralsina, awesome! :D [12:26] ralsina: hi there! I just made another review like 30 minutes ago, you added changes after that? [12:27] nessita: nope, just sitting down at the computer right now [12:27] nessita: me, I would've also logged the return value of f in log_call [12:27] Chipaca: makes perfect sense, doing it [12:27] ralsina: so, I think you removed the skip of a testcase... I added comments about that in the MP [12:28] nessita: I removed the skip so the tests I added would run, but I can add it back and move them to another tet case. OTOH, in the next branch they would move back [12:28] ralsina: right, the thing is that everything fails for me if that testcase is enabled back [12:28] nessita: also, i would've used urllib.urlencode(dict_of_attrs) rather than assembling it myself [12:28] nessita: so, maybe this branch could go in with the other tests in that testcase failing (but those succeeding) instead of adding code I would remove again later today? [12:29] nessita: (re PLATFORM_PARAMS) [12:29] oh, right it breaks everything for you :-( [12:29] Chipaca: ah, that's a good one, let me fix that as well [12:29] nessita: in fact, looks like all you want is urllib.urlencode(PLATFORM_DATA) [12:30] Chipaca: let me read the doc and I may nod or not :-D [12:30] ralsina: not sure why fixing this branch will make you add code you will remove later today. Can you please help me understand? [12:31] Chipaca: I'm nodding! :-) [12:32] nessita: if I move the tests to another test case and move them back into this testcase again, that means adding the testcase and removing it? [12:32] ralsina: right, but if I'm following you, the test case you will be adding now will be reused in the next branch? [12:33] I mean, you can add the test case you have in the incoming branch (without all the adding of the tests) [12:33] no? [12:33] nessita: actually, since I reimplement most of LocalFoldersPage, the current testcase starts working, AFAIK [12:33] the next branch has this testcase, but working :-) [12:34] ralsina: don't you want to merge that new test case only in this branch? [12:34] new == fixed [12:34] nessita: it will not work for you because of problems in LocalFoldersPage (race conditions) [12:35] I could just merge this branch to the next one and propose the ext one instead [12:35] ralsina: let's do that, and I'll review the next one when is ready (as soon as is ready) [12:35] ok then [12:40] ralsina: any intern work going? [12:40] fagan: just arrived, but I think joshua has some more work on the docs [12:41] joshuahoover: you have anything for me to work on? [12:41] ralsina: well I did a big wiki redirect thing on monday I didnt hear about anything else [12:41] fagan: how about bug triage? :) [12:42] actually that's not a bad idea. [12:42] Ill have a look at the list then :) [12:42] ralsina: fagan completed the last of the big docs tasks we had [12:42] fagan: I need all the NEW/unassigned linux bugs of u1 for the last couple of weeks checked [12:42] ralsina: kk [12:43] joshuahoover: ok [12:45] Chipaca: merged trunk in, urlencode added, test updated, pushed to revno 1111 [12:45] nessita: awesome. [12:45] * Chipaca smiles at beuno [12:46] * beuno giggles [12:46] connect 4 :D [12:48] fagan: ○○○○○○○ [12:48] fagan: ○○○○○○○ [12:48] fagan: ○○○○○○○ [12:48] fagan: ○○○○○○○ [12:48] fagan: ○○○○○○○ [12:49] fagan: ○●●●●○○ [12:49] fagan: sorry, you lose [12:49] * Chipaca runs [12:49] Chipaca: what game were you playing I was white :D [12:50] heh :) [12:50] * fagan is a sharp one [12:50] * Chipaca concedes the match [12:50] gg wp [12:51] nessita: urlencode will produce unordered results, and that test will randomly fail [12:51] uh [12:51] nessita: (because it uses a dict) [12:51] let me patch urlencode then [12:52] nessita: or sort platform_data, or use urlparse to compare :) [12:53] nessita: e.g. urlparse.parse_qsl(urlparse.urlparse(PING_URL).query) [12:53] Chipaca: urlparse will not give me a dict back, unless I'm missing something. I'm getting a ParseResult, where the "path" path looks like a string [12:54] ah, I was using urlparse.urlparse [12:54] yeah, urlprase.urlparse gives you a namedtuple [12:54] the 'query' element therein, you extract with parse_qsl [12:54] ... [12:54] * Chipaca just realized he was reading the code :) [12:55] beuno: I learnt some web programming today! :-D [12:56] nessita: we'll have you doing Plone in no time! [12:56] * nessita fades [13:00] moi [13:00] #nessita { opacity: 0; } [13:01] ralsina, dobey, alecu, nessita, gatox standup [13:01] me [13:01] me [13:02] oh, standup, no notes for me yet, I will go last [13:02] ill go the others can catch up [13:02] DONE [13:02] * a bit of reading [13:02] TODO [13:02] * checking up on recent bugs [13:02] BLOCKED [13:02] * Nope [13:02] gatox: go [13:02] DONE: [13:02] https://code.launchpad.net/~diegosarmentero/ubuntu-sso-client/bug-820872/+merge/71774 and https://code.launchpad.net/~diegosarmentero/ubuntuone-windows-installer/bug-820872/+merge/71773 COMPLETE. Second one finishing some additional tests. [13:02] me [13:02] TODO: [13:03] finish some work in installer UI bugs [13:03] BLOCKED: [13:03] no [13:03] ralsina, go [13:03] DONE: reviews, calls, worked some more on my pending branches. TODO: merge them, hopefully make u1cp do the right thing when there are no credentials BLOCKED: no [13:03] nessita? [13:03] DONE: bug #827343, reviews [13:03] TODO: control panel UI tweaks, more reviews [13:03] BLOCKED: nopes [13:03] NEXT: dobey? alecu? [13:03] Launchpad bug 827343 in ubuntuone-client "Send platform details when pinging for credentials (affects: 1) (heat: 6)" [High,In progress] https://launchpad.net/bugs/827343 [13:04] me [13:04] DONE: chased time.clock issues on VirtualBox; worked on fixing tests for the branch for bug #824819. Started looking at eq_inotify tests [13:04] TODO: fix the f*#@!ng test that's blocking the whole testrun, work on eq_inotify [13:04] BLOCKED: yes, please [13:04] Launchpad bug 824819 in ubuntuone-client "SD and tests need to wait until a watch is removed (affects: 1) (heat: 6)" [High,Triaged] https://launchpad.net/bugs/824819 [13:04] alecu: did upgrading VB helped? [13:05] nessita, no, it does the same. It seems to do it less often though, but it still keeps the clock quiet sometimes [13:06] nessita, the only way I found was to add a small "time.sleep" whenever we are calling time.clock :P [13:06] alecu: can you somehow workaround this locally to unblock? I mean, what concrete symptom are you having? [13:07] nessita, but this is not the root cause of the test that's blocking. The clock issue is a sideturn I took while debugging tritcask tests that use it [13:07] me [13:07] dobey: go! [13:07] λ DONE: bug #827519, discussion on #817133 and #820345 [13:07] λ TODO: finish bug #817133, chat with lisette [13:08] λ BLCK: None. [13:08] Launchpad bug 827519 in ubuntuone-installer "don't add the stable ppa (affects: 1) (heat: 6)" [High,Fix committed] https://launchpad.net/bugs/827519 [13:08] Launchpad bug 817133 in ubuntu "[FFe] [needspackaging] ubuntuone-installer needs packaged (affects: 1) (heat: 12)" [High,Incomplete] https://launchpad.net/bugs/817133 [13:08] alecu: ok, so feel free to "drop" the tritcask issue for now [13:08] nessita, the test that blocks right now just blocks the whole test run when running "run_test.sh" [13:08] alecu: which one is it? [13:09] nessita, but it works fine if I run just that test file [13:09] alecu: is it something in test_vm? [13:09] nessita, no, it's in test_sync [13:09] nessita, most of test_vm is running fine on trunk [13:10] nessita, let me push it, and I'll ask you to run it to see if it hangs like here. [13:10] alecu: sure! [13:11] nessita, lp:~alecu/ubuntuone-client/watch-finished-deferred [13:11] branchinf [13:11] nessita, run_tests -t test_sync works [13:12] nessita, but just "run_tests" hangs up on test_sync.runTest :-( [13:12] nessita, that'll come in hadny for your rotation *wink* [13:12] _ != - [13:13] alecu: FYI: [13:13] Text conflict in tests/platform/test_os_helper.py [13:13] 1 conflicts encountered. [13:13] alecu: can you please fix to ensure we run the same? [13:14] oh, sure [13:16] Chipaca: is there a cleaner way to solve http://pastebin.ubuntu.com/668248/? I don't like using '://' explicit, but the closest thing I found from urlparse is urlunsplit, but to use it in the test I should chopped off the query content from the ParseResult, which is not cleaner nor clearer, from my POV [13:26] nessita, fixed and pushed [13:27] alecu: re-branching! [13:27] nessita, I would not mind about the "://". Just make it a constant, as it would be rare for us to change protocols to something that does not use "://" [13:28] alecu: is a test, and is used in only one place, you think is worth making a constant? [13:28] mailto:ping@url or telnet:ping.url sounds unreasonable [13:28] nessita, then don't mind about it! [13:28] * nessita does not mind then [13:28] Chipaca: fixed and pushed to revno 1112! [13:29] nessita: ok [13:29] nessita: I +1'ed it already [13:29] great! [13:31] alecu: run_tests -t test_sync, all green, going with the whole suite now [13:31] nessita, Chipaca: I would like a review of https://code.launchpad.net/~ralsina/ubuntuone-windows-installer/local-folder-fixes/+merge/71857 if you have a moment please [13:32] ralsina: sure! [13:34] alecu: run-tests finished: FAILED (skips=39, failures=9, errors=42, successes=2141) [13:35] alecu: what test in particular is being blocked for you? [13:35] nessita, test_sync.runTest [13:35] nessita, yes, runTest [13:35] hum, that's a setUp or tearDown being blocked [13:35] nessita, test added https://code.launchpad.net/~diegosarmentero/ubuntuone-windows-installer/bug-820872/+merge/71773 [13:36] alecu: can you add prints to setUp and tearDown to see where the runTest is being blocked? [13:36] nessita, I don't think so. I have put pdb.set_trace() in setup, teardown and an overloaded runtest, and it blocks there. [13:37] nessita, I can try that too [13:37] alecu: so, the runTest is run for every TestCase, which testcase is being blocked? we may wanna check that setUp and his parents, if any [13:41] ralsina: is there a testcase for FolderItem? [13:41] I can't find it myself [13:42] nessita: not explicitly. It's old code, but I will add one. [13:42] ralsina: thanks! [13:44] please make sure to assert that: [13:44] - the checkstate is unchecked [13:44] - the volume id is the one passed as parameter [13:44] - the thread is started if calculate is True, not started if not [13:44] - size is None if calculate, 0 if not [13:44] Also, I would advice moving the self.thread assignment outside the if-else since is the same one no matter the value of calculate [13:45] (I'm adding this to the MP) [13:46] Chipaca, ralsina: are we mumbling today? [13:47] nessita: instead of a testcase, would it be ok if I add tests in LocalFolders testcase? FolderItem is mostly an implementation detail for that class [13:48] ralsina: recommended approach is to have at least a TestCase per each class [13:48] ok [13:48] ralsina: so we can split it out if needed, or if we add more logic we can isolate that [13:48] also, is better for the next one who tries to find the tests [13:49] to either understand who that class is used, or add more tests, et [13:49] c === m_conley_away is now known as m_conley [14:00] alecu: any news? [14:01] nessita, I've checked the parents, and no news. And since when running alone it passes fine, I'm suspecting one of the previous tests is leaving some broken state. [14:02] nessita, so right now I'm deleting one by one the previouses .py testfiles and running run_tests again [14:10] ralsina: I made more comments in the MP, but I paused the review so we can have some checkpoints to avoid confusion about what's fixed and what's pending. [14:10] nessita: ok [14:11] gatox: re-reviewing yours now [14:11] nessita, ok [14:11] gatox: on a qss, shall I set font sizes in px or pts? [14:12] nessita, i do it in px [14:12] gatox: lisseeeeete asked me to set control panel font to 13px, not sure if that is correct [14:12] nessita, yes, i'm using font-size with px [14:12] nessita: about self.assertFalse(self.ui.folders_info is None) I am asserting that because get_info is *not* finished, because it's a deferred. [14:12] ack, thanks [14:13] ralsina: but... folder_info can be None, right? [14:13] you're asserting is not None [14:13] or am I missing something? [14:13] oops, read it the wrong way. get_info is calling a fake deferred that succeeds immediately [14:14] so, shouldn't that always be a value? [14:14] ralsina: answer is "so". Let me explain: [14:14] the bad part is I can't make initializePage be a generator because it's called by PyQt so can't be a generator, so I should probably go the other path you suggest [14:15] ralsina: I think that's the best option, because otherwise, someone who reads that test may think that we ensure that when initializePage ends, folder_Info is not None, which in practice is not True [14:15] ok, makes sense [14:18] gatox: question, were the changes to the ui in the branch before? I think they weren't... [14:18] about the join(): I am making sure the thread is not running because if it is, it will overwrite the item.size later. [14:18] gatox: but please correct me [14:18] * gatox looking... [14:18] ralsina: what if the thread was not running and you join it? can that fail? /me does not know [14:18] nessita: OTOH, that thread should not be started, so removing [14:19] if a thread is not running, join returns immediately [14:19] nessita, nop....... sorry... reverting... [14:19] ralsina: can we start a thread already joined? [14:20] nessita: sure [14:21] yikes, I was not using the "calculate" parameter if it was a UDF, so the thread was started. [14:21] nessita, ralsina: why are we using threads in the Qt part? [14:21] alecu: calculate disk usage of folders in a non-blocking way [14:22] ralsina, do we have the qt reactor running there? [14:23] alecu: yes [14:23] nessita, done [14:23] ralsina, what api are we using to open that thread? [14:23] alecu: python's threading [14:23] alecu: I wish I could use QThread, but we can't [14:23] ralsina, perhaps it would make sense to use the twisted threading [14:24] alecu: big point for using threading: I already wrote it ;-) [14:24] ralsina, my point is that we are not sure if threading conflicts with twisted threading on windows. [14:24] alecu: ugh [14:25] d=reactor.deferToThread(calculate_disk_space) [14:25] d.addCallback(disk_space_returned_something) [14:25] alecu: still ugh because I have the code here and it works :-( [14:25] d.addErrback(disk_space_failed_and_heres_the_exception) [14:25] and it has been there for a month or so [14:25] alecu: good point! [14:26] ralsina, ok, if it works, don't fix it! [14:26] alecu, ralsina: let's file a bug for this and try to schedule this some time in the near future [14:26] alecu: can you please fill the bug? [14:26] fine by me [14:26] nessita, ralsina: I'm pointing this, because I hate joins [14:27] alecu: there are no more joins :-) [14:27] ralsina, cool then. [14:27] alecu: me too, and since ATM very few people is running this, we can't ensure we won t have issues there [14:28] * ralsina points out that rewriting things that are not kown to be broken is very non-TDD [14:29] ralsina: right, but is good to know that we may have weird issues and they may be caused by threads misbehaving in windows [14:29] nessita: sure, we can keep that in mind [14:32] gatox: looks good! though, question: you alse reverted the changes to the qss... I don't think taht's right [14:32] gatox: there was a new style for form errors? [14:33] ugh [14:33] alecu: I'm afraid to ask, but.. yes? [14:33] nessita, oh crap... yes, you are right..... [14:33] * gatox is working with form errors everywhere [14:33] nessita, we are using python threads in syncdaemon too. [14:33] alecu: what for? [14:33] nessita, in hash_queue and the windows NetworkManager [14:34] nessita, I've already asked in #chicharra about the hash_queue, and we'll have to wait for mandel to ask about the windows NetworkManager [14:34] alecu: let's fill bug, there's much we can do right now today [14:34] there isn't much* ;-) [14:34] nessita, done [14:35] oook [14:37] gatox: approved, please seek another review [14:38] nessita, [14:38] ok [14:39] alecu, ralsina can you review this branch? https://code.launchpad.net/~diegosarmentero/ubuntuone-windows-installer/bug-820872/+merge/71773 [14:39] gatox: sure! [14:39] ralsina, thanks! [14:57] nessita: answered comment, pushed fixes [14:57] now let's look at gatox's branch1 [14:58] ralsina: ack, I will re-review in 15 minutes~ [15:00] gatox: shouldn't that fix for critical be done also in sso-client? [15:01] ralsina: is done and merged [15:01] ralsina, yes...... that branch was merge already [15:01] oh, ok, forgot about it [15:01] then it [15:01] 's a+1 [15:01] ralsina, cool [15:02] hmm [15:14] lunch time, bbiab [15:14] ralsina: I just requested the swap day for next MOnday. gatox will do the same, but he's defining which day will swap the holiday to [15:15] nessita: so both of you and mandel will be here on monday? [15:16] ralsina, yes [15:16] ralsina: yeap, gatox needs the holidays for pycon and/or christmas break... [15:16] gatox, nessita: cool, I'll approve later today [15:16] great [15:16] for pycon we can use conference days, can't we? [15:16] ralsina, i think i don't have conference days [15:16] gatox: I am not sure you have any conference days until after the probation though [15:16] ralsina: yes, but seems like gatox has none... [15:17] yes, on probation there are no holidays/conference days [15:17] ralsina, ahhhh, that make sense [15:37] I'm off for a (today) shortish lunch. See you people in about 40 minutes. [15:57] alecu: you still blocked? :-/ [16:03] nessita, I found that by erasing test_filesystem_notifications.py all the tests pass, and now I'm bisecting inside that. [16:04] alecu: the windows version or the multiplatform onw? [16:04] nessita, the windows one [16:05] alecu: let me know if I can help debug [16:05] thanks [16:34] lunchtime for me! [16:35] and back, with belly full === beuno is now known as beuno-lunch [16:57] ralsina: for future coding (no need to change it now), is recommended to call the addCleanup right after the sentence that makes the env "dirty". What I mean is, ideally right after creating a file, for example, we would add the self.addCleanup call [16:57] nessita: ok, I can move it before merging the branch, so I don't make the diff change [16:58] ralsina: one thing I will ask you to fix is that this call: [16:58] self.addCleanup(lambda: shutil.rmtree(self.tmpdir)) [16:58] should be: [16:58] self.addCleanup(shutil.rmtree, self.tmpdir) [16:58] you can fix that later as well [16:58] ok, will do both things together [16:58] thanks [17:05] ralsina, please correct me if i'm wrong... but there is no chance to detect focus in and focus out event except that with eventFilter, isn't it? [17:05] (i', talking about qlineedit) [17:05] gatox: if you set eventTracking, I think there is, let me check [17:06] you want focus events, or mouse hover events? [17:06] focus [17:06] focusInEvent() [17:06] focusOutEvent() [17:07] ralsina: question: I see that the mocked info for volumes_info has 3 items in it, where 2 of them are UDFs; but the test_status_after_get_info checks against 5 top level item count. Which ones are the other 3? [17:07] I think I foooooooooound it.... [17:07] nessita: the default folders (music docs pictures) [17:07] alecu: tell us!!! [17:07] yes...... but i'm using a simple qlineedit inside another widget....... so i should do lineEdit.installEventFilter(self)..... i ask because i know you don't like eventFilter :P [17:07] ralsina: ack [17:07] I think it was a missing "yield" in test_add_single_watch. [17:07] gatox: which means inheriting unless it's an enhancedlineeedit [17:07] I'm testing it all together now. [17:08] gatox: indeed I don't ;-) [17:08] ralsina: is there any test for the adding of those default folders? [17:08] (I want to follow it in the code, if there is any) [17:08] fuck [17:08] alecu: no? :-/ [17:08] nessita: well, it's checked that they are added (or else there would be only 2), but the function that tells you what they are is going away [17:08] no, it was not a missing yield [17:08] ralsina, right..... i was reviewing my options...... because it will be inherit just for focusInEvent and focusOutEvent, and i'll need to replace the components in the UI as promotedWidgets [17:09] ralsina: not sure I understand. What function is going away? default_folders? [17:09] gatox: let me research 5'. If I don't find an alternative, I'll give you a eventFilter exception :-) [17:09] it's an ugly monkeypatch that's not restored :-( [17:09] nessita: yes, it will use the function that's in xdg.basedirectory instead [17:09] alecu: is a call to pacth? [17:09] nessita, no [17:09] Watch.start_watching = start_watching [17:10] guh! [17:10] ralsina: but, the default_folders will remain in place, just the implementation will change, right? [17:10] nessita, it seems mandel only learned about trial.patch pretty recently :-( [17:10] ralsina: what should we do about pyxdg? [17:10] nessita: yes, it will just return three paths from the other function [17:11] ralsina, or i can create an enhanced lineedit..... and maybe include some generic logic inside there to check if they are valid and so..... it's not a problem [17:11] ralsina, what you think is best [17:11] gatox: http://doc.qt.nokia.com/latest/qapplication.html#focusChanged [17:11] so no eventFilter for you ;-) [17:11] ralsina: so we do need a test to confirm that default_folders is returning what it should, not matter what implementation has. Is that test in the suite already, or shall we add a bug for it? [17:12] damn, damn, damn the little childrens [17:12] ralsina, jeje ok [17:12] nessita: it makes more sense to add that test in xdg when it's done, right? [17:12] dobey: good question, didn't have time to do anything about it yet :-( [17:13] nessita, I ended up deleting every test_*.py file except the two involved: test_file_notifications.py and test_sync.py [17:14] nessita, and then commenting the test functions inside there... [17:14] ralsina: so, we need at least 2 (group of) tests: one in u1client when fixing xdg, and another (very likely not the same one) in windows-installer for the default_folders method. This ensures that no matter the implementation of default_folders, we ensure the correctness of the method in installer [17:14] this's been hell :-( [17:14] alecu: I can certainly imagine... :-( [17:14] ralsina: I meant: "no matter the implementation of xdg methods..." [17:15] nessita: not saying not to test the pathsm but there isn't much to check in those paths, since they can be lliterally anything [17:15] ralsina: that's why inside installer we should not depend on anything in particular but we very likely patch xdg with fixed paths and assert over that [17:16] but we need test(s) for default_folders [17:16] nessita: not sure what to test beyond "it's three strings" [17:16] ralsina: I agree we can add them in an incoming branch, but I want to be sure we're in sync [17:16] nessita: no, I will add it I just am not sure what to test for [17:17] ralsina: so, consider this scenario: someone comes and see the default folder implementarion and removes the calls to xdg (or whatever we use) and replace that by the returning of a fixed list with 3 things in it, ['casa', 'perro', 'gato']. We need a test failing because the content of the result, despite having the proper lenght, is not the expected [17:18] ralsina: I know no one will approve such a branch, but is a silly example trying to show what you need to test [17:18] but that is not actually a wrong result (except that they are not absolute paths) [17:18] ralsina: it's if I actually use the string 'casa', 'perro' and 'gato' [17:19] we want to ensure the contents are exactly 'My Documetns' and all, where 'My Documents' is not a literal string but something that we patch inside the underlying libraries [17:19] nessita: you can change your documents path to be "c:\users\casa" (or pretty much any other path) [17:19] nessita: http://www.online-tech-tips.com/computer-tips/how-to-move-or-change-the-location-of-my-documents-folder/ [17:19] ralsina: yes, but that's no the point [17:20] nessita: sorry, I still don't get it [17:20] ralsina: assume you have not changed any document path nor name, but I go and change the implementation of default_folder to return a fixed list, always the same [17:20] no matter what system we're in, we return 'casa', 'perro' and 'gato' [17:22] can we use "c:\casa" in your example? Because I do know those have to be absoute paths. [17:22] ralsina: no, we can't. I'm evil and I changed default_folders to return [object(), {}, urlparse.urlparse('http://example.com')] [17:23] ralsina: what test will fail in that case? [17:23] nessita: ok, I can test that they are 3 strings that represent absolute paths. [17:23] so it will fail that test. [17:23] ralsina: what if I change the implementation to return: [17:24] ['i', 'want', 'icecream'] [17:24] those are not absolute paths [17:24] your test will no longer fail [17:24] ok, what if: [17:24] ['e:\i', 'f:\want', 'z:\icecream'] [17:25] ralsina: the point is you need to assert about the contents of the list [17:25] thoat is a valid value for default_folders() so it should not fail [17:25] no, is not valid [17:25] yes they are :-) [17:25] valid results are those returned by xdg when queried for special folders [17:25] nessita: xdg can return that [17:25] ralsina: as long as the user has those, which in my case is not true [17:26] nessita: no, it can return that even if they don't exist [17:26] ralsina: in which case? [17:26] You can change your "My Documents" folder to any path. Say, on a removable drive. And then unplug it. [17:26] It is an *unusual* value? Yes. Is it invalid? No. [17:27] ralsina: yeah, but that is not the point!!! [17:27] ralsina: let's mumble [17:27] nessita: which is why I say I don't get the point yet [17:27] sure [17:27] nessita, I'm not sure I get this either [17:28] nessita, can you sketch some code for how the unittest would work? [17:43] nessita: just as a sidenote it is trivial to create a reimplementation of a function that passes all tests and does nothing useful. It should only record all side effects and return values for each set of input data of the original function, then replay them when tested. Unless you randomize your inputs, of course ;-) [17:43] and throw exceptions on all unknown input combinatios, just for fun [17:44] ralsina: that is true for some cases, is not for some others [17:44] when TDDing "sum", is very easy not to cover all cases (almost mandatory) so you can certainly do that [17:44] nessita: it's true for all programs written in a turing-complete language. [17:45] no, if you test some function was called with some parameters, you can not fake that in your implementation, you will have to actually call the thing [17:45] except, if you test for all valid imput cmbinations, yes, the result is a vlid implementation [17:46] nessita: yes, I can fake it. I will only call it when the input data is the exact data you used in the tests. If it's different, I will not call it. [17:47] Proof: I can just embed the original function. If the input is the one used in the tests, pass it. If no, raise DivideByZero ;-) [17:48] ralsina: I would love if you could use all that energy you're investing in thinking how to break tests to build robust tests :-) [17:49] nessita: I am writing the test, this is old stuff I know from before ;-) [17:49] nessita: just trying to show you that "what if we change the implementation to return fluffy bunnies" has limited persuasion value ;-) [17:50] ok, duly noted === beuno-lunch is now known as beuno [17:52] ralsina: going back to your branch: can you please explain why there is no more need to call join on the calculating threads? [17:52] in the join you mentioned before? Because for UDFs the thread is not started. [17:52] And there is a test that it's not started, too. [17:53] And for non-udfs, I want to let it calculate [17:53] ralsina: no, joins in general. I understood we were no longer joining no thread... [17:53] ralsina: are we joining the threads that are run? [17:53] nessita: they end eventually. [17:53] nessita: when they end, they push the result into a Queue and we pick it [17:54] ralsina: but we need to join them the same, no? at least in C we need to, not sure in python [17:54] alecu: ^ [17:54] Not on python [17:54] join() just waits until they end [17:54] AFAIK, that is [17:55] in C, join also releases all the resources the thread has [17:55] these threads have no local resources [17:55] * nessita reads the python doc [17:56] s/local/thread-local/ up there [17:57] nessita: could you look at your msdn downloads page and see if it's working for you? [17:57] ralsina: what would happen if we quit the app before each thread finishes? [17:57] Chipaca: sure! [17:57] nessita: the threads will end, because they are daemon threads [17:57] nessita: also what browser you use to check :) [17:59] Chipaca: argh, can't remember password, on sec [18:01] nessita: pushed the discussed test for special_folders [18:01] Chipaca: have the url handy? [18:01] ah, I foun it [18:02] Chipaca: I can browse https://msdn.microsoft.com/en-us/subscriptions/securedownloads/default.aspx with firefox, want me to try a download? [18:02] nessita: but does it give you a key? [18:03] Chipaca: all downloads are "unavailable" [18:04] right, same here [18:04] sigh [18:04] did it expire? [18:06] alecu: I will be leaving to uni in 30 minutes, would you please send a report when your day finished, about accomplishments and status so we i can coordinate mandel's work on monday? (and know where things were left) [18:08] nessita: before you leave, can we mumble 5' so you can give me some hints re: bug #828170 ? [18:08] Launchpad bug 828170 in ubuntuone-control-panel "On windows, the control panel fails without credentials (affects: 1) (heat: 6)" [Critical,Triaged] https://launchpad.net/bugs/828170 [18:09] ralsina: I can implement that tomorrow, if you want [18:09] nessita: you are going to need some support on the installer's side of things, I suspect. [18:09] ralsina: why? [18:09] So for example, you don't get the license page [18:09] ralsina: last mock from design did not involve the installer [18:09] oh [18:09] and what will you use? [18:10] a screen offering the user to login [18:10] with a design fitting the control panel design [18:10] I imagined as much, but are we doing *another* sso ui? [18:10] so it stays all within the same project [18:10] ralsina: no, I will be using SSO UI [18:11] bah, what do you mean with another? [18:11] have you seen the UI provided by SSO without tweaks? [18:11] ralsina: no, but I was planning on fixing that as well [18:11] ok [18:11] one thing less for me to look at then [18:11] ralsina: want a bug report as a suggestion? :-) [18:12] nessita: sure [18:12] nessita: if you think you are going to integrate SSO into u1cp and fix its UI in one day, I suspect you are being wildly optimistic. [18:13] I know :-) [18:13] ralsina: are we embedding payments somehow in the installer? [18:13] No [18:13] great [18:13] There is a button that sends you to the page [18:14] ralsina: right. I have 2 proposals: either implementing the special_folders in xdg. and/or moving the folder validation to syncdaemon [18:14] nessita: I take the xdg thing. The other sounds painful. [18:14] Plus, it would mean branches in u1-client u1cp and u1-installer [18:15] well *windows*-installer ;) [18:15] dobey: good point! [18:17] gatox, ralsina: I would love to have some reviews for https://code.launchpad.net/~nataliabidart/ubuntuone-control-panel/ui-style-fixes/+merge/71928 [18:17] nessita: got it [18:17] nessita, on it [18:20] i think i need a drink [18:22] ralsina: if you have more slots, you can also do https://code.launchpad.net/bugs/827465, which is easy but High [18:22] nessita: Error: Bug #827465 is private. [18:22] nessita: in line 70: instad of setting maximum heights, you should set the vertical policy to minimum [18:23] and then set the height of the inner widgets + paddings [18:23] nessita: usually, fixed pixel sizes on anything but padding is not a good idea [18:25] nessita, if you set the maximum size to 16px..... is it necessary to use fixed policy? [18:25] gatox: either that r set the miimum to 16px too [18:25] Also, ask dobey how a 13px font looks on his notebook ;-) [18:26] but I know where that came from, so it's ok to leave it on [18:27] 13px or pt? [18:27] px [18:27] I am guessing it comes to between gnat and half-gnat :-) [18:28] nessita, looks fine by me! [18:28] it looks like anything else that takes up 13 pixels in the vertical direction, i guess :) [18:28] dobey: care to offer a guss in millimeters? ;-) [18:29] btw: 13px font glyphs usually are about 9px tall in average [18:29] i don't know how tall my screen is in mm [18:29] I can take 256ths of inches [18:29] ralsina: that did not work, I tried it... [18:29] but i mean, 13px will look small on even my workstation [18:29] ralsina: I can try again, but later today, I'm leaving running [18:30] nessita: will leave it in the MP then [18:30] ralsina: add those notes to the MP and I will take care of them after teaching [18:30] right [18:30] ralsina: I will also finish your review later today [18:30] bye all! [18:30] nessita: cool, thx. Bye! [18:31] on my workstation, 9 px would be about 2.5 mm [18:31] that's on my workstation [18:33] on my laptop, maybe 1 mm if lucky [18:35] ok, so I hope you are not planning to use ubuntu one when we switch to qt :-( [18:44] i don't even use the control panel now :) [18:53] gatox: do you have the "uninstall on cancel" bug queued? [18:54] yes.... after this branch probably... you told me that the uninstall bug depends on something else, don't you? [18:55] ralsina, ^ [18:56] turns out it doesn't :-) [18:56] gatox: all you have to do is call "uninstaller --mode=qt" and it does *exactly* what we want [18:56] ralsina, ok... i'll start working on that after this branch! :D [18:56] awesome [18:56] you don't have to code anything [18:56] ralsina, more awesome! jeje [18:57] or nothing beyond a call to Popen :-) [18:57] ralsina, yes [18:57] :P [18:57] If you have the bug# handy I will post that there [18:57] ralsina, ok.... i'm finishing with this, and then i'll do that [18:57] * gatox looking... [18:58] ralsina, https://bugs.launchpad.net/ubuntuone-windows-installer/+bug/823414 [18:58] gatox: Error: Bug #823414 is private. [18:58] gatox, cool, commenting [19:01] i think maybe i should go get some snackification [19:02] dobey: is your snack indicator blue? :) [19:04] it's NIR [19:06] brb, must get snacks [19:08] gatox: do we still have a "start syncdaemon on login" checkbox somewhere? [19:09] ralsina, that should be added in congratulations [19:09] one of the branches i need to start too [19:09] I will do it now then [19:10] but ... not starting syncdaemon makes no sense :-) [19:10] ralsina, yes [19:10] gatox: do you have a bug for it? [19:10] I have bug #826728 for the functionality but none for the ui [19:10] Launchpad bug 826728 in ubuntuone-windows-installer "wizard should add syncdaemon to autostart (affects: 1) (heat: 52)" [High,Triaged] https://launchpad.net/bugs/826728 [19:10] ralsina, let me check [19:11] ralsina, https://bugs.launchpad.net/ubuntuone-windows-installer/+bug/827365 [19:11] Launchpad bug 827365 in ubuntuone-windows-installer "Add functionality to Congratulations page checkboxes (affects: 1) (heat: 6)" [Undecided,New] [19:13] ok [19:13] thanks! [19:36] ralsina, review please: https://code.launchpad.net/~diegosarmentero/ubuntuone-windows-installer/setupaccount-form-behavior/+merge/71937 [19:37] ralsina, now i have to leave, but i'll leave the computer on, so if you have any comment to this branch please let me know or leave a comment in the merge proposal :D [19:41] gatox: will do! [19:45] still no love [20:05] i hate waiting === m_conley is now known as m_conley_away === yofel_ is now known as yofel [21:19] ralsina: hi there! I replied to the MP... there is a spec and a bug report requesting the 30px height... what shall we do? [21:19] ralsina: I can revert that bit so we can land this [21:19] nessita: I mailed you and lisette. We should argue a tiny bit about it tomorrow morning, and then see [21:20] we can land it tomorrow. Or we can even land it with that, it's just that if we start setting pixel sizes everywhere it's going to be a pain in the future [21:20] ralsina: I would like to land it today so I can start a fresh branch tomorrow. I'm happy reverting the fixed size if you'd like [21:21] nessita: nah, let's just push it accoring to spec, and later on, if we change the spec, we will have to review all .ui files anyway [21:21] nessita: I'll change that to approved [21:21] luckiy detecting all the things that have fixed sizes is easy :-) [21:22] yeah there are several fixed heights (I will bring them up tomorrow then) [21:22] nessita: got a link to the MP handy? [21:22] https://code.launchpad.net/~nataliabidart/ubuntuone-control-panel/ui-style-fixes/+merge/71928 [21:23] nessita: there, approved in general [21:23] nessita: if you have 5' could you check an email I sent about the congratulations page? [21:24] yes, sure [21:32] have a good evening all! [21:32] bye dobey! [21:34] dobey: bye! [21:34] ralsina: so, I read the email, and while answering, I realized I was confused: we have 2 pending stuff to do regarding credentials and control panel: [21:34] * what you said today, about starting the control panel without credentials, that I confused with the following: [21:34] * what page to show when the user removes the current device, and for this we do have a simple workflow where we only offer to login. [21:35] So, to implement (1), I think the following: [21:36] just login so we don't mix metadata from two accounts, right? [21:36] exactly [21:36] * we should provide a single icon in the desktop, which will execute a python script that will check if there are credentials. If there are, we can start the control panel directly, if they are not, we start the wizard. What do you think? [21:37] nessita: that sounds easy to implement [21:37] what I mean is, the "Ubuntu One"program as such has the intelligence to show one or the other [21:37] Right [21:37] it will work weird if the user removes credentials manually but that's his own fault ;-) [21:37] so, to ease things, we can assume in the (windows for now) control panel that credentials are always there [21:38] shall I answer this? [21:38] Currently, if there are credentials, the wizard jumps to the "computer to cloud" page. I could make it just exec control panel [21:38] And then the wizard is that program already [21:38] ralsina: that would work indeed [21:39] and we never provide explictely an icon for launching the control panel [21:39] it also has the code to exec control panel, so it's 5 lines or so [21:39] right? [21:39] exactly [21:39] right [21:39] how to translate that to linux is going to be a pain :-) [21:39] or maybe not, we just have to think about that a bit [21:39] Anyway, I think we have a plan :-) [21:41] Yes, reply at least that we have talked about it and reached an agreement. OTOH, I really need input on the (I think) useless checkboxes. [21:42] yes, I have a answer to that [21:42] sending shortly [21:42] And now I have to go play "Ben 10 Alien storm" on the Wii for an hour or so ;-) [21:42] nessita, ralsina: https://code.launchpad.net/~alecu/ubuntuone-client/watch-finished-deferred/+merge/71955 [21:42] ralsina, cool! [21:42] alecu: saw it. Is that the one that made you curse mandel's ancestors? [21:42] ralsina, yup [21:43] ralsina, the whole family, not just ancestors [21:43] alecu: it's awesome. You can transform into all the aliens, including the ultimates, and they all have signature moves:-) [21:43] alecu: it's the one we bought in Hamley's [21:43] ralsina, sounds lovely! we've been playing toy story 3, and I was very pleasantly surprised at how good it was. [21:43] So, alecu, have a nice long weekend, nessita, have some rest, see you tomorrow! [21:44] * ralsina needs to get that wii chipped [21:44] ralsina, but the best so far is and has been Zelda twilight princess [21:44] ralsina, a hundred peso, but then you'll need a usb cdr [21:44] alecu: ugh [21:45] maybe I'll just buy the games via the wii store [21:45] * ralsina is so burgueois [21:45] we know! [21:45] ok, good night, send me emails about things that may need to be looked at at midnight ;-) [21:46] ralsina, night! [21:46] I still miss Wind Waker. :) [21:47] ralsina: bye, I'm sending the email as soon as people stop distracting me :-D [21:55] nhaines, gamecube, right? it wasn't a very common console around here [21:56] but now you see wiis everywhere [21:57] alecu: you need something else from me, besides a review? [21:57] nessita, encouragement? [21:57] nessita, not really :-) [21:58] * alecu loves playing really old games, and will try to get windwaker to use in his wii [21:58] alecu: YOU ROCK! YOU CAN DO THIS! [21:58] woohoo!!!! [21:58] alecu: KEEP BREATHING! [21:58] alecu: think about the weekend.... I'm sure you'll have a great time [21:58] and send my saludos to your wife and kid :-) [21:58] * alecu bends down and tries to catch his breath [21:59] saludos will be dice! [21:59] LOL [22:01] alecu: exactly! The only trouble would be finding a GameCube controller to use in your Wii to play Windwaker. :) [22:03] oh, right :/ [22:04] alecu: I don't know why the Wii classic controllers don't work... even the L/R triggers feel analog to me (maybe not on the new CC Pros). :( [22:05] alecu: I have a question: in this code we're kind of ignoring the real exception, is that intended? self._watch_started_deferred.errback, Failure()) [22:06] nessita, the Failure() constructor with no parameters *keeps* the raised exception. [22:06] nessita, its like "just raise" [22:06] alecu: oh, I did not not know that! [22:07] you taught me something new todat [22:07] nessita, me neither, learned it for this branch :-) [22:07] alecu: the branch looks good, will run tests and then approve. I'll make sure this lands tomorrow. [22:07] nessita, what's lovely is that it keeps the original stacktrace [22:07] that is lovely indeed, and clean [23:09] nessita: stiill around? [23:09] ok, no she is not :-) [23:45] hey, any word on the server problem that means I can't save playlists?