summarylogtreecommitdiffstats
path: root/charm
diff options
context:
space:
mode:
authorXavierCLL2019-07-24 11:49:25 -0500
committerXavierCLL2019-07-24 11:49:25 -0500
commitf82b905c72fd7e2e0e56152552f5b9554f816585 (patch)
treebb7d6ef22ce313050a5509826e74c8c30d0ed8c2 /charm
parentd7aef519f09328eab7566c2cb31d6bea842ca200 (diff)
downloadaur-f82b905c72fd7e2e0e56152552f5b9554f816585.tar.gz
Updated to 2019.2
Diffstat (limited to 'charm')
-rwxr-xr-x[-rw-r--r--]charm71
1 files changed, 48 insertions, 23 deletions
diff --git a/charm b/charm
index 109a7b78187a..2ca9560ed183 100644..100755
--- a/charm
+++ b/charm
@@ -1,28 +1,53 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+import os
import socket
import struct
import sys
-import os
-import time
# see com.intellij.idea.SocketLock for the server side of this interface
RUN_PATH = u'/opt/pycharm-professional/bin/pycharm.sh'
-CONFIG_PATH = u'~/.PyCharm2019.1/config'
-SYSTEM_PATH = u'~/.PyCharm2019.1/system'
+CONFIG_PATH = u'~/.PyCharm2019.2/config'
+SYSTEM_PATH = u'~/.PyCharm2019.2/system'
def print_usage(cmd):
print(('Usage:\n' +
' {0} -h | -? | --help\n' +
- ' {0} [project_dir]\n' +
- ' {0} [-l|--line line] [project_dir|--temp-project] file[:line]\n' +
+ ' {0} [project_dir] [-w|--wait]\n' +
+ ' {0} [-l|--line line] [project_dir|--temp-project] [-w|--wait] file[:line]\n' +
' {0} diff <left> <right>\n' +
' {0} merge <local> <remote> [base] <merged>').format(cmd))
+def write_to_sock(sock, str):
+ if sys.version_info[0] >= 3: str = str.encode('utf-8')
+ sock.send(struct.pack('>h', len(str)) + str)
+
+
+def read_from_sock(sock):
+ len = struct.unpack('>h', sock.recv(2))[0]
+ return sock.recv(len).decode('utf-8')
+
+
+def read_sequence_from_sock(sock):
+ result = []
+ while True:
+ try:
+ str = read_from_sock(sock)
+ if str == '---':
+ break
+ result.append(str)
+
+ except (socket.error, IOError) as e:
+ print("I/O error({0}): {1} ({2})".format(e.errno, e.strerror, e))
+ traceback.print_exception(*sys.exc_info())
+ return result
+ return result
+
+
def process_args(argv):
args = []
@@ -36,6 +61,8 @@ def process_args(argv):
elif arg == '-l' or arg == '--line':
args.append(arg)
skip_next = True
+ elif arg == '-w' or arg == '--wait':
+ args.append('--wait')
elif skip_next:
args.append(arg)
skip_next = False
@@ -67,30 +94,28 @@ def try_activate_instance(args):
return False
s = socket.socket()
- s.settimeout(0.3)
+ s.settimeout(1.0)
try:
s.connect(('127.0.0.1', port))
except (socket.error, IOError):
return False
- found = False
- while True:
- try:
- path_len = struct.unpack('>h', s.recv(2))[0]
- path = s.recv(path_len).decode('utf-8')
- if os.path.abspath(path) == os.path.abspath(CONFIG_PATH):
- found = True
- break
- except (socket.error, IOError):
- return False
+ paths = read_sequence_from_sock(s)
+ found = CONFIG_PATH in paths
if found:
- cmd = 'activate ' + token + '\0' + os.getcwd() + '\0' + '\0'.join(args)
- if sys.version_info[0] >= 3: cmd = cmd.encode('utf-8')
- encoded = struct.pack('>h', len(cmd)) + cmd
- s.send(encoded)
- time.sleep(0.5) # don't close the socket immediately
- return True
+ write_to_sock(s, 'activate ' + token + '\0' + os.getcwd() + '\0' + '\0'.join(args))
+
+ s.settimeout(None)
+ response = read_sequence_from_sock(s)
+ if response[0] != 'ok':
+ print('bad response: ' + response)
+ exit(1)
+
+ if len(response) > 2:
+ print(response[2])
+
+ exit(int(response[1]))
return False