dever.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. dever-manage tools
  5. name:dever.py
  6. author:rabin
  7. """
  8. from core import *
  9. import json
  10. class Dever(object):
  11. git = 'http://git.dever.cc:3000/'
  12. ssh = 'ssh://git@git.dever.cc:10022/'
  13. lib = Core.path + 'container/share/lib/php/'
  14. dev = Core.path + 'container/web/'
  15. framework = 'dever/framework.git'
  16. demo = 'dever/demo.git'
  17. package = 'dever-package/'
  18. product = 'dever-product/'
  19. package_list = []
  20. @classmethod
  21. def init(self):
  22. method = Core.getMethod(Dever_Action, Args.action)
  23. method()
  24. @classmethod
  25. def rely(self, action, path):
  26. package = path + 'package.json'
  27. if Args.param:
  28. Dever_Create.package(path, Args.param)
  29. Args.param = ''
  30. if File.exists(package):
  31. data = File.read(package, '')
  32. data = json.loads(data)
  33. if 'rely' in data:
  34. rely = data['rely'].split(',')
  35. for v in rely:
  36. package = action.package(v)
  37. self.package_list.append({'path':package, 'name':v})
  38. @classmethod
  39. def create(self, path):
  40. name = os.path.basename(path)
  41. Dever_Create.boot(path + '/', name)
  42. print "create finished!"
  43. @staticmethod
  44. def cur(up = True):
  45. name = Args.name
  46. path = File.cur()
  47. if name:
  48. git = ''
  49. if '/' in name:
  50. git = name
  51. name = os.path.basename(git).replace('.git', '')
  52. path = path + '/' + name
  53. if git and up:
  54. Dever_Create.git(git, path)
  55. return path
  56. @staticmethod
  57. def custom():
  58. git = Args.param
  59. if not git:
  60. git = Env.dever()
  61. if not git or 'http' not in git:
  62. git = Dever.git + Dever.package
  63. return git
  64. class Dever_Create(object):
  65. @staticmethod
  66. def package_boot(lib):
  67. file = lib + 'boot.php'
  68. if not File.exists(file):
  69. File.write(file, "<?php \r\nif (!defined('DEVER_PROJECT')) {\r\ndefine('DEVER_PROJECT', 'default');\r\ndefine('DEVER_PROJECT_PATH', dirname(__FILE__) . DIRECTORY_SEPARATOR);\r\n}\r\ninclude(dirname(__FILE__) . DIRECTORY_SEPARATOR . '../dever/boot.php');")
  70. @classmethod
  71. def boot(self, path, name):
  72. file = path + 'boot.php'
  73. if not File.exists(file):
  74. File.write(file, "<?php \r\ndefine('DEVER_PROJECT', '"+name+"');\r\ndefine('DEVER_PROJECT_PATH', dirname(__FILE__) . DIRECTORY_SEPARATOR);\r\nif (defined('DEVER_PACKAGE')) {\r\n include('dever_package/'.DEVER_PACKAGE.'/index.php');\r\n} else {\r\n include('dever/boot.php');\r\n}")
  75. self.dm(path)
  76. self.gitignore(path)
  77. self.data(path)
  78. self.config(path, name)
  79. @classmethod
  80. def index(self, path, name, package):
  81. path = path + name + '/'
  82. if File.exists(package + 'index.php') and not File.exists(path):
  83. File.mkdir(path)
  84. file = path + 'index.php'
  85. if not File.exists(file):
  86. File.write(file, "<?php \r\ndefine('DEVER_PACKAGE', '"+name+"');\r\ndefine('DEVER_APP_SETUP', dirname(__FILE__) . DIRECTORY_SEPARATOR);\r\ninclude(dirname(__FILE__) . DIRECTORY_SEPARATOR . '../boot.php');")
  87. if File.exists(package + 'daemon'):
  88. path = path + 'daemon/'
  89. if not File.exists(path):
  90. Core.popen('cp -R ' + package + 'daemon/ ' + path)
  91. @staticmethod
  92. def gitignore(path):
  93. file = path + '.gitignore'
  94. if not File.exists(file):
  95. File.write(file, "dm\r\n.DS_Store\r\n*.pyc\r\ndata/upload/*\r\ndata/database/*\r\ndata/project/*\r\ndata/logs/*\r\n\r\ndata/signature/*\r\ndata/avatar/*")
  96. @staticmethod
  97. def dm(path, check = False):
  98. file = path + 'dm'
  99. state = File.exists(file)
  100. if check:
  101. return state
  102. if not state:
  103. File.write(file, "dm created")
  104. @staticmethod
  105. def package(path, rely):
  106. file = path + 'package.json'
  107. if not File.exists(file):
  108. File.write(file, '{\r\n"rely": "'+rely+'"\r\n}')
  109. @staticmethod
  110. def git(addr, path):
  111. file = path + '/' + '.git/'
  112. if not File.exists(file):
  113. Git.update(addr, path)
  114. else:
  115. Git.set(addr, path)
  116. @staticmethod
  117. def data(path):
  118. path = path + 'data/'
  119. if not File.exists(path):
  120. File.mkdir(path)
  121. Core.popen('chmod -R 777 ' + path)
  122. file = path + 'readme'
  123. if not File.exists(file):
  124. File.write(file, "dever create")
  125. @staticmethod
  126. def config(path, name):
  127. path = path + 'config/'
  128. if not File.exists(path):
  129. File.mkdir(path)
  130. file = path + 'base.php'
  131. if not File.exists(file):
  132. File.write(file, "<?php\r\n$config['base'] = array\r\n(\r\n'name' => '"+name+"',\r\n'version' => '1.0.0 Beta'\r\n);\r\nreturn $config;")
  133. file = path + 'route.php'
  134. if not File.exists(file):
  135. File.write(file, "<?php\r\nreturn array\r\n(\r\n'home' => 'home',\r\n);")
  136. path = path + 'env/localhost/'
  137. if not File.mkdirs(path):
  138. File.mkdir(path)
  139. file = path + 'default.php'
  140. if not File.exists(file):
  141. File.write(file, "<?php\r\n$config['database'] = array\r\n(\r\n'default' => array\r\n(\r\n'type' => 'pdo',\r\n'host' => array\r\n(\r\n'read' => 'web-mysql:3306',\r\n'update' => 'web-mysql:3306',\r\n),\r\n'database' => '"+name+"',\r\n'username' => 'root',\r\n'password' => '123456',\r\n'charset' => 'utf8',\r\n),\r\n);\r\nreturn $config;")
  142. class Dever_Action(object):
  143. @staticmethod
  144. def init():
  145. Git.update(Dever.git + Dever.framework, Dever.lib + 'dever')
  146. @classmethod
  147. def package(self, name = False):
  148. if not name:
  149. name = Args.name
  150. return self.update(Dever.git + Dever.package + name, name)
  151. @classmethod
  152. def store(self):
  153. Env.dever(Args.name)
  154. @classmethod
  155. def get(self):
  156. git = Dever.custom()
  157. return self.update(git + Args.name, Args.name)
  158. @classmethod
  159. def update(self, store, name = False):
  160. if not name:
  161. name = Args.name
  162. lib = Dever.lib + 'dever_package/'
  163. path = lib + name + '/'
  164. Git.update(store, path)
  165. Dever.rely(self, path)
  166. Dever_Create.package_boot(lib)
  167. project = Dever.cur(False) + '/'
  168. if Dever_Create.dm(project, True):
  169. Dever_Create.index(project, name, path)
  170. return path
  171. @classmethod
  172. def all(self):
  173. path = Dever.lib + 'dever_package/'
  174. files = File.getFiles(path)
  175. if files:
  176. for i in files:
  177. if '.' not in i:
  178. self.update(False, i)
  179. @classmethod
  180. def pull(self):
  181. path = Dever.cur()
  182. Dever.rely(self, path + '/')
  183. Git.update('', path + '/')
  184. return path
  185. @classmethod
  186. def push(self):
  187. path = File.cur()
  188. Git.push(path + '/', Args.name, Args.param)
  189. @classmethod
  190. def convert(self):
  191. name = Args.name
  192. cur = File.cur() + '/'
  193. path = cur + name + '/'
  194. git = Dever.custom()
  195. if git == 'package':
  196. git = Dever.git + Dever.package
  197. tmp = File.tmp() + name + '/'
  198. Git.update(git + name, File.tmp() + name)
  199. package = Dever.lib + 'dever_package/' + name + '/'
  200. if not File.exists(package):
  201. Core.popen('cp -R ' + tmp + ' ' + package + ' && rm -rf ' + tmp + ' && cp -R ' + path + '* ' + package + ' && rm -rf ' + path + '')
  202. else:
  203. Core.popen('cp -R ' + tmp + '* ' + package + ' && rm -rf ' + tmp + ' && cp -R ' + path + '* ' + package + ' && cp -R ' + path + '.git/ ' + package + '.git/ && rm -rf ' + path + '')
  204. Dever_Create.index(cur, name, package)
  205. @classmethod
  206. def push_package(self):
  207. path = Dever.lib + 'dever_package/' + Args.name
  208. Git.push(path + '/', False, Args.param)
  209. @classmethod
  210. def dev(self):
  211. path = File.cur()
  212. Git.push(path + '/', Args.name, Args.param)
  213. @classmethod
  214. def product(self):
  215. path = Dever.dev + Args.name
  216. Git.update(Dever.git + Dever.product + Args.name, path)
  217. Dever.rely(self, path)
  218. @staticmethod
  219. def demo():
  220. Git.update(Dever.git + Dever.demo, Dever.dev + 'demo')
  221. @classmethod
  222. def create(self):
  223. path = self.pull()
  224. print "creating..."
  225. for v in Dever.package_list:
  226. Dever_Create.index(path + '/', v['name'], v['path'])
  227. Dever.create(path)