21
21
except (ImportError ):
22
22
pass
23
23
24
+ class PanelPrinter ():
25
+ instance = None
26
+
27
+ @classmethod
28
+ def get (cls ):
29
+ if cls .instance == None :
30
+ cls .instance = PanelPrinter ()
31
+ return cls .instance
32
+
33
+ def __init__ (self ):
34
+ self .name = 'package_control'
35
+ self .window = sublime .active_window ()
36
+ self .panel = self .window .get_output_panel (self .name )
37
+ self .panel .settings ().set ("word_wrap" , True )
38
+ self .write ('Package Control Messages\n ========================' )
39
+
40
+ def show (self ):
41
+ sublime .set_timeout (self .show_callback , 0 )
42
+
43
+ def show_callback (self ):
44
+ self .window .run_command ("show_panel" , {"panel" : "output." + self .name })
45
+
46
+ def write (self , string ):
47
+ callback = lambda : self .write_callback (string )
48
+ sublime .set_timeout (callback , 0 )
49
+
50
+ def write_callback (self , string ):
51
+ self .panel .set_read_only (False )
52
+ edit = self .panel .begin_edit ()
53
+
54
+ self .panel .insert (edit , self .panel .size (), string )
55
+ self .panel .show (self .panel .size ())
56
+ self .panel .end_edit (edit )
57
+ self .panel .set_read_only (True )
58
+
59
+
24
60
class ThreadProgress ():
25
61
def __init__ (self , thread , message , success_message ):
26
62
self .thread = thread
@@ -622,6 +658,7 @@ def incoming(self):
622
658
623
659
class PackageManager ():
624
660
def __init__ (self ):
661
+ self .printer = PanelPrinter .get ()
625
662
# Here we manually copy the settings since sublime doesn't like
626
663
# code accessing settings from threads
627
664
self .settings = {}
@@ -884,6 +921,9 @@ def install_package(self, package_name):
884
921
885
922
package_dir = self .get_package_dir (package_name )
886
923
924
+ package_metadata_file = os .path .join (package_dir ,
925
+ 'package-metadata.json' )
926
+
887
927
if os .path .exists (os .path .join (package_dir , '.git' )):
888
928
return GitUpgrader (self .settings ['git_binary' ],
889
929
self .settings ['git_update_command' ], package_dir ,
@@ -893,6 +933,11 @@ def install_package(self, package_name):
893
933
self .settings ['hg_update_command' ], package_dir ,
894
934
self .settings ['cache_length' ]).run ()
895
935
936
+ is_upgrade = os .path .exists (package_metadata_file )
937
+ old_version = None
938
+ if is_upgrade :
939
+ old_version = self .get_metadata (package_name ).get ('version' )
940
+
896
941
package_bytes = self .download_url (url , 'Error downloading package.' )
897
942
if package_bytes == False :
898
943
return False
@@ -992,8 +1037,8 @@ def slow_delete(function, path, excinfo):
992
1037
path )
993
1038
package_zip .close ()
994
1039
995
- package_metadata_file = os . path . join ( package_dir ,
996
- 'package-metadata.json' )
1040
+ self . print_messages ( package_name , package_dir , is_upgrade , old_version )
1041
+
997
1042
with open (package_metadata_file , 'w' ) as f :
998
1043
metadata = {
999
1044
"version" : packages [package_name ]['downloads' ][0 ]['version' ],
@@ -1013,6 +1058,45 @@ def slow_delete(function, path, excinfo):
1013
1058
os .chdir (sublime .packages_path ())
1014
1059
return True
1015
1060
1061
+ def print_messages (self , package , package_dir , is_upgrade , old_version ):
1062
+ messages_file = os .path .join (package_dir , 'messages.json' )
1063
+ if os .path .exists (messages_file ):
1064
+ messages_fp = open (messages_file , 'r' )
1065
+ message_info = json .load (messages_fp )
1066
+ messages_fp .close ()
1067
+
1068
+ shown = False
1069
+ if not is_upgrade and message_info .get ('install' ):
1070
+ install_messages = os .path .join (package_dir ,
1071
+ message_info .get ('install' ))
1072
+ message = '\n \n ' + package + ':\n '
1073
+ with open (install_messages , 'r' ) as f :
1074
+ message += f .read ().replace ('\n ' , '\n ' )
1075
+ self .printer .write (message )
1076
+ shown = True
1077
+
1078
+ elif is_upgrade and old_version :
1079
+ upgrade_messages = list (set (message_info .keys ()) -
1080
+ set (['install' ]))
1081
+ upgrade_messages = sorted (upgrade_messages ,
1082
+ cmp = self .compare_versions , reverse = True )
1083
+ for version in upgrade_messages :
1084
+ if self .compare_versions (old_version , version ) >= 0 :
1085
+ break
1086
+ if not shown :
1087
+ message = '\n \n ' + package + ':'
1088
+ self .printer .write (message )
1089
+ upgrade_messages = os .path .join (package_dir ,
1090
+ message_info .get (version ))
1091
+ message = '\n '
1092
+ with open (upgrade_messages , 'r' ) as f :
1093
+ message += f .read ().replace ('\n ' , '\n ' )
1094
+ self .printer .write (message )
1095
+ shown = True
1096
+
1097
+ if shown :
1098
+ self .printer .show ()
1099
+
1016
1100
def remove_package (self , package_name ):
1017
1101
installed_packages = self .list_packages ()
1018
1102
0 commit comments