Sublime Forum

Package Control: A full-featured package manager

#85

[quote=“bizoo”]I have a crash with this scenario:

  • Execute the “Package Control: Install Package” command.

  • Switch to another windows before the end of the command.

  • Wait a few seconds.

  • Crash of ST2

It’s always reproducible.
If I minimize ST2 instead of put it’s windows on the background, it works fine.

startup, version: 2112 windows x64 channel: dev[/quote]

I’ve tried a bunch of times to reproduce this, but I’ve been unable. What other plugins do you have installed?

What program are you switching too? I’ve tried switching to another Sublime window, Windows explorer and Chrome.

What package are you trying to install when this happens?

Do you have an antivirus program installed? Again, I’m just trying to figure out how your machine is different than mine.

And lastly, do you have any packages cloned via git or hg in your Packages directory?

0 Likes

#86

They should already be grouped by domain (github.com/wbond/sublime_packag … ol.py#L759), but you are saying you added a timeout between each download also? Could you throw a gist up of what you’ve changed?

0 Likes

#87

Yeah, that is on my list of things to do.

0 Likes

#88

Thanks for the code. I’ll run it through some testing on my various environments and then push it out to see if it alleviates issues for the windows users that have been having crashes.

0 Likes

#89

[quote=“sublimator”]I pushed some experimental alterations for your consideration: github.com/sublimator/sublime_p … ol.py#L797

100ms staggering between the requests seems to work for me.

I’ve loaded bitbucket pages firebug before and seem them use the api a lot, sometimes 4-5 ajax requests.[/quote]

I tried out the grouping you had but it is now taking around twice as long to bring up the package list and I am getting multiple retries every time. I think the extra time might be because you a joining on the first running downloader you hit.

I’m going to try and get my windows install in a situation where I have an error trying to get something from bitbucket or github and see if I can replicate the crashing. After that I an ensure there is a fix that works.

0 Likes

#90

[quote=“bizoo”]I have a crash with this scenario:

  • Execute the “Package Control: Install Package” command.

  • Switch to another windows before the end of the command.

  • Wait a few seconds.

  • Crash of ST2

It’s always reproducible.
If I minimize ST2 instead of put it’s windows on the background, it works fine.

startup, version: 2112 windows x64 channel: dev[/quote]

I was finally able to reproduce this. It appears that creating a hidden window subprocess for hg from within a thread in ST2 is causing the crash. I am guessing this is an issue with ST2, so I am going to see if I can provide Jon with enough information to look into it.

0 Likes

#91

Yes. I’m not sure why I had it in mind that joining one thread would stop the others. It will just stop the original spawning thread.

I’m going to try you solution again to see if I was just getting a fluke with the failures and timeouts. I suppose with a 5 second timeout that a couple of failures on github URL could easily make the process take a long time.

I’m not sure why I’ve experienced so many timeout issues when testing GitHub and BitBucket. I can browse the web no problem, and like you’ve mentioned, chrome has no trouble downloading 4+ assets from github at the same time, so I’m not sure why I have trouble with urllib2 and curl. I suppose maybe the fact that I need to spawn curl on Linux to download https URLs could be affecting performance, but that wouldn’t explain why I was getting similar timeout issues on my Win 7 vm.

Anyway, I’ve at least identified bizoo’s issue. I’ll try to work around that for now and then try your downloader solution and see if I can get that working any faster. Hopefully I’ll have a new, much more stable version out tonight or tomorrow.

0 Likes

#92

[quote=“sublimator”]Hrmmm, so I don’t think it is a subprocess/hg bug but rather some weird condition comprised of showing the quick_panel from a timeout inside a thread when the Sublime window doesn’t have focus. I guess only Jon would really know what the issue is there.

I got curious after going to bitbucket when in my notifications I saw a commit Guillermoo made to his Hg plugin. He was using windowless subprocess also. I then watched process explorer while alt - tabbing between it and Sublime and noticed Sublime crashing when git was the subprocess. Hrmm…

Anyway, so I found that it crashed fairly consistently at the same point, that being right at the end of PackageInstaller.make_package_list, after the very lastest package which in my group of plugins happens to be git controlled.

Hrmmm. So it seems to happen when switching windows. What if we make Sublime wait until it’s focused? Does it still crash?

[code] if os.name == ‘nt’:
from ctypes import windll
getwh = windll.user32.GetForegroundWindow

        while getwh() != self.window.hwnd():
            time.sleep(0.001)

[/code]

It doesn’t seem to in the 4-5 manual tests I’ve done. These crashes are only effecting us windows (lo|u)sers you say?[/quote]

Thanks for the tip about the quick panel. I found that this simple example shows the crash off.

# coding=utf-8
import sublime
import sublime_plugin
import threading
import time


class InstallPackageCommand(sublime_plugin.WindowCommand):
    def run(self):
        thread = InstallPackageThread(self.window)
        thread.start()


class InstallPackageThread(threading.Thread):
    def __init__(self, window):
        self.window = window
        threading.Thread.__init__(self)

    def run(self):
        time.sleep(3)
        def show_quick_panel():
            self.window.show_quick_panel('foo'], 'bar']], self.on_done)
        sublime.set_timeout(show_quick_panel, 0)
    
    def on_done(self, num):
        print num


sublime.active_window().run_command('install_package')

Basically if a set_timeout of 0 that shows a quick panel is called in a thread and Sublime isn’t the foremost window (on Windows) then it will crash. Changing the timeout to anything larger than 0 fixes the crash. Another interesting thing is that if the sublime window is not focused, the quick panel never shows, but instead fires the on_done callback with -1, like if the user had hit escape.

0 Likes

#93

[quote=“sublimator”]So the crash is NOT happening on linux/osx?

You are getting the -1 cancelling behaviour though?[/quote]

On Linux and OS X I do not get a crash and the quick panel does show even though another window has the focus. I can return focus to the ST2 window and interact with the quick panel.

[quote=“sublimator”]I kind of like having set_timeout not queue up/halt when Sublime is unactive.

It should show the quickpanel though eh and wait for input rather than cancel.[/quote]

Yeah, I would not expect set_timeout to queue up or halt when it is not active. I would expect the timers to run as normal. And I agree, I think the behavior on Linux and OS X seems correct with the quick panel showing and waiting for input.

0 Likes

#94

I just pushed version 1.2.5 out.

Thanks sublimator for all of the help. I ended up testing and getting the 150ms staggering to work well and I am seeing faster performance.

For a short term fix that isn’t too messy I updated all of the sublime.set_timeout() calls to 10ms instead of 0ms. This seems to prevent the crashing issue on Windows that bizoo was having and I think some other crashing issues that Windows users have mentioned when trying to install and upgrade packages.

0 Likes

#95

Just tried this on windows and get long delays when repos are refreshing. Also, it only seems to show about 5 available packages. Any idea what is going on?

0 Likes

#96

It sounds like https URLs are timing out. All of the packages are served over https, except for mine since I host my own packages.json file. It just so happens I have 6 packages available. The rest of the packages are hosted on GitHub and BitBucket, which force use of SSL.

If you look at the console (ctrl+`) you will probably see some errors about downloading URLs. Let me know what you find and I can try to help resolve it.

0 Likes

#97

You are probably right - i am behind a proxy, which has caused issues with other source control programs. Do you know of a system environment variable or some other setting I can change, probably related to proxies, to allow this to go through?

0 Likes

#98

Package Control has two settings, http_proxy and https_proxy. If you set http_proxy and not https_proxy, the http_proxy will be used for https also.

You can see the settings to copy by going to the Preferences > Package Settings > Package Control > Settings - Default menu entry. Copy those two settings to the Preferences > Package Settings > Package Control > Settings - User file and customize there.

0 Likes

#99

I want to add “https://bitbucket.org/wuub/sublimerepl” to Package Control but I want the “default” branch, not the “pexpect” one that run only in linux.
How I could specify the branch in the config ?

Edit:
Didn’t find a way in the api.bitbucket.org documentation to find the last changeset of a branch, so actually it’s the last changeset of the repository that is downloaded, which is not the one I want. :frowning:

0 Likes

#100

[quote=“bizoo”]I want to add “https://bitbucket.org/wuub/sublimerepl” to Package Control but I want the “default” branch, not the “pexpect” one that run only in linux.
How I could specify the branch in the config ?

Edit:
Didn’t find a way in the api.bitbucket.org documentation to find the last changeset of a branch, so actually it’s the last changeset of the repository that is downloaded, which is not the one I want. :frowning:[/quote]

Yeah, it looks like I need to update Package Control to explicitly specify the default branch when grabbing changesets. api.bitbucket.org/1.0/repositor … lt?limit=1

I should be able to do this later today.

0 Likes

#101

Didn’t found the syntax for the branch, I must be blind.
Anyway, I suppose that an entry in the config file to specify the branch is required, I’m not sure that we don’t want default branch everytime.

Thanks.

0 Likes

#102

[quote=“bizoo”]Didn’t found the syntax for the branch, I must be blind.
Anyway, I suppose that an entry in the config file to specify the branch is required, I’m not sure that we don’t want default branch everytime.[/quote]

I think that having Package Control only pull from default when you specify a BitBucket URL is perfectly fine. If you want to use a version in a branch then you can clone the repo, checkout the branch and Package Control will keep it up to date with the remote for you.

0 Likes

#103

Didn’t know you could do that, nice.

Thanks for the update.

0 Likes

#104

Oups (on upgrade command):

startup, version: 2117 windows x64 channel: dev ... Exception in thread Thread-4: Traceback (most recent call last): File ".\threading.py", line 532, in __bootstrap_inner File ".\Package Control.py", line 500, in run File ".\Package Control.py", line 300, in get_packages KeyError: 'changesets'
This is the JSON I receive, no ‘changesets’ records

{ "node": "3bd4e612ff6e", "files": { "type": "added", "file": ".hgignore" }, { "type": "added", "file": "Default (Linux).sublime-keymap" }, { "type": "added", "file": "Default (OSX).sublime-keymap" }, { "type": "added", "file": "Default (Windows).sublime-keymap" }, { "type": "added", "file": "case_conversion.py" } ], "raw_author": "Scott Bessler <scottbessler@gmail.com>", "utctimestamp": "2011-09-15 01:00:39+00:00", "author": "scottbessler", "timestamp": "2011-09-15 03:00:39", "raw_node": "3bd4e612ff6ea1c865772a971fb517cc42f386f1", "parents": ], "branch": "default", "message": "modifying case conversion to work on all selections, and pep8ing it", "revision": 0, "size": -1 }
I changed all:

last_commit'changesets'][0]

by:

last_commit

And apparently it works.

0 Likes