Skip to content

Commit 85396ea

Browse files
committed
Fixes #34, Fixes #35
1 parent aefbaa1 commit 85396ea

File tree

13 files changed

+173
-21
lines changed

13 files changed

+173
-21
lines changed

client/autodeploy_client/Client.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,13 @@ def ListTags(self, workdir, owner=''):
5959
return newlist
6060
else:
6161
return []
62+
def ListBranchs(self,workdir,owner=''):
63+
global msg
64+
if owner == '':
65+
owner = Config.Owner
66+
msg = Job.createGetBranchs(workdir=workdir, scm=self.scm, owner=owner)
67+
result = self._send(msg)
68+
return result.split("\n")
6269
def SwitchTag(self, workdir, tag, owner=''):
6370
global msg
6471
if owner == '':
@@ -78,10 +85,10 @@ def Deploy(self, workdir, configFile, owner=''):
7885
def CheckUp(self):
7986
return Connect.connect(self.server, self.port, 5)
8087

81-
def ListCommits(self, workdir, page=0, rpp=10, owner=''):
88+
def ListCommits(self, workdir, page=0, rpp=10, owner='',options=None):
8289
if owner == '':
8390
owner = Config.Owner
84-
msg = Job.createListCommitsMessage(workdir=workdir, scm=self.scm, owner=owner,key=self.sshkey)
91+
msg = Job.createListCommitsMessage(workdir=workdir, scm=self.scm, owner=owner,key=self.sshkey,options=options)
8592
res = self._send(msg)
8693
result = []
8794
#HEAD = True

client/autodeploy_client/ClientJob.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,20 @@ def importKey():
1313
return key
1414

1515

16+
def createGetBranchs(workdir, scm, owner,options=None):
17+
sec = base64.encodestring(importKey().encrypt(owner + scm + "LIST-BRNACHS", "")[0])
18+
f = '<job owner="%s" type="%s" sec="%s" scm="%s">\n' % (owner, "LIST-BRNACHS", sec, scm)
19+
f += '<workdir>%s</workdir>' % workdir
20+
21+
if options:
22+
f += '<options>'
23+
for option in options.keys():
24+
f += "<option name='%s'>%s</option>" % (option, options[option])
25+
26+
f += "</options>"
27+
f += '</job>'
28+
return f
29+
1630

1731
# Provide id, owner and command as string
1832
# inputsFiles as List of file path

exampleConfig/autodeploy.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ permissions:
1111

1212
events:
1313
beforeInstall:
14-
- location: "/bin/rm -r /var/www/autodeploy"
14+
- location: "/bin/rm -rf /var/www/autodeploy"
1515
afterInstall:
1616
- location: "/var/www/autodeploy/manage.py runserver 0.0.0.0:9002 &"
1717
interpreter: python

server/Request.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,26 @@ def parseListTagsJob(message):
6767
return params
6868

6969

70+
def parseListBranchsJob(message):
71+
params = {}
72+
optionsDict = {}
73+
doc = xml.dom.minidom.parseString(message)
74+
Job = doc.getElementsByTagName('job')[0]
75+
scm=Job.getAttribute("scm")
76+
workdir= getValue(Job, 'workdir')
77+
78+
requestType = Job.getAttribute('type')
79+
owner = Job.getAttribute('owner')
80+
"""options = (Job.getElementsByTagName('option'))
81+
for option in options:
82+
name = option.getAttribute("name")
83+
optionsDict[name] = option.firstChild.nodeValue
84+
"""
85+
print 'Recieved New Job from ' + owner + '.....'
86+
params = {"workdir": workdir,"owner": owner, "requestType": requestType,"scm":scm,"options": optionsDict}
87+
return params
88+
89+
7090
def parseSwitchTagJob(message):
7191
params = {}
7292
optionsDict = {}
@@ -122,8 +142,12 @@ def parseGetCommitsJob(message):
122142
requestType = Job.getAttribute('type')
123143
key= getValue(Job, 'sshkey')
124144
owner = Job.getAttribute('owner')
125-
params = {"workdir": workdir,"owner": owner, "requestType": requestType,"key":key,
126-
"scm":scm,"options": optionsDict}
145+
options = (Job.getElementsByTagName('option'))
146+
for option in options:
147+
name = option.getAttribute("name")
148+
optionsDict[name] = option.firstChild.nodeValue
149+
params = {"workdir": workdir, "owner": owner, "requestType": requestType, "key": key,
150+
"scm": scm, "options": optionsDict}
127151
return params
128152

129153

server/autodeploy-server.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,13 +102,32 @@ def HandleClient(clientsock):
102102
pass
103103
Response.sendData(clientsock,"\n".join(result))
104104
return
105-
105+
elif req["requestType"] == "LIST-BRNACHS":
106+
job = Request.parseListBranchsJob(msg)
107+
if job["scm"] == "git":
108+
gclient = git.GIT(workdir=job["workdir"])
109+
cmd = gclient.get_list_branches()
110+
result = []
111+
res = Common.run(cmd)
112+
print res
113+
if "ERR:" in res:
114+
Response.sendData(clientsock, res)
115+
else:
116+
for line in res.split("\n"):
117+
try:
118+
if line!="":
119+
result.append(line.replace("*","").strip())
120+
except:
121+
pass
122+
print result
123+
Response.sendData(clientsock, "\n".join(result))
124+
return
106125
elif req["requestType"]=="LIST-COMMITS":
107126
job = Request.parseGetCommitsJob(msg)
108127
if job["scm"]=="git":
109128
gclient=git.GIT(workdir=job["workdir"])
110129
gclient.setKey(job["key"])
111-
cmd=gclient.get_history_cmd()
130+
cmd=gclient.get_history_cmd(job["options"])
112131
elif req["requestType"]=="SWITCH-TAG":
113132
job = Request.parseSwitchTagJob(msg)
114133
if job["scm"]=="git":

server/scm/BaseSCM.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ def get_list_tags_cmd(self):
1010
pass
1111
def get_switch_to_tag_cmd(self):
1212
pass
13-
def get_history_cmd(self,page=0,rpp=10):
13+
def get_history_cmd(self,page=0,rpp=10,options={}):
1414
pass
1515
def switch_to_histroy_cmd(self,commit):
1616
pass

server/scm/Git.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,21 @@ def get_pull_cmd(self):
2222
return "cd %s; git pull"%self.workdir
2323
def get_list_tags_cmd(self):
2424
return "cd %s;git tag -l"%self.workdir
25+
26+
def get_list_branches(self):
27+
return "cd %s;git branch -a" % self.workdir
28+
2529
def get_switch_to_tag_cmd(self,tag):
2630
return "cd %s; git checkout tags/%s"%(self.workdir,tag)
27-
def get_history_cmd(self):
28-
return 'cd ' + self.workdir +'; git log --all --pretty=format:"%H,,%h,,%an,,%ar,,%s,,%cd" | cat -'
31+
def get_history_cmd(self,options={}):
32+
branch=options.get("branch","")
33+
cmd = 'cd ' + self.workdir +'; git log '
34+
if branch!="":
35+
cmd += branch
36+
else:
37+
cmd+= ' --all '
38+
cmd += ' --pretty=format:"%H,,%h,,%an,,%ar,,%s,,%cd" | cat -'
39+
return cmd
2940
def switch_to_histroy_cmd(self,commit):
3041
return 'cd %s; git reset --hard %s'%(self.workdir,commit)
3142
def commit_diff_cmd(self,commit):
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
from django.db import models, migrations
5+
import datetime
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('autodeploy', '0013_auto_20150817_1250'),
12+
]
13+
14+
operations = [
15+
migrations.AlterField(
16+
model_name='project',
17+
name='lastCommit',
18+
field=models.CharField(max_length=50, blank=True),
19+
),
20+
migrations.AlterField(
21+
model_name='project',
22+
name='lastUpdate',
23+
field=models.DateTimeField(default=datetime.datetime(2016, 5, 14, 13, 17, 34, 809478), blank=True),
24+
),
25+
]

webapp/autoDeploy/autodeploy/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class Project(models.Model):
3030
repo = models.CharField(max_length=255, blank=True)
3131
default_server=models.ForeignKey(Server,blank=True)
3232
update_style=models.CharField(max_length=10,blank=True)
33-
lastCommit = models.CharField(max_length=32,blank=True)
33+
lastCommit = models.CharField(max_length=50,blank=True)
3434
lastTag=models.CharField(max_length=255,blank=True)
3535
lastCommitDate = models.DateTimeField(blank=True,default="1970-01-01")
3636
working_dir=models.FileField(blank=True)

webapp/autoDeploy/autodeploy/views.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,8 @@ def deploy2(request):
147147
if project.update_style=="tag":
148148
return listTags(request, server)
149149
else:
150-
return listCommits(request)
150+
filter=request.GET.get("filter",None)
151+
return listCommits(request,filter)
151152

152153
@login_required(redirect_field_name="redirect")
153154
def listTags(request, server):
@@ -273,29 +274,43 @@ def checkServersStatus(request):
273274
return render_to_response("base.html", {"title":"Servers Health","function":"checkServers","dataType":"JSON","data":"","ajax": True}, context_instance=RequestContext(request))
274275

275276
@login_required(redirect_field_name="redirect")
276-
def listCommits(request):
277+
def listCommits(request,filter=None):
277278
#if request.method == "GET":
278279
res = None
280+
branches=[]
281+
c=None
282+
server=None
283+
project=None
279284
print request.GET.get("refresh","False")
280285
if request.GET.get("refresh","False")=="True":
281286
if "commits" in request.session:
282-
del request.session["commits"]
287+
request.session.pop("commits","")
288+
request.session.pop("branchs","")
283289
return redirect("./listCommits")
284-
if not "commits" in request.session:
290+
if filter or not "commits" in request.session:
285291
server = Server.objects.get(name=request.session["deploy_server"])
286292
project = Project.objects.get(name=request.session["deploy_project"])
287293
c = Client("git", server.ip, server.port,key=project.sshKey.key)
288294
c.Pull(project.repo,project.working_dir,project.sshKey.key)
289-
res = c.ListCommits(project.working_dir)
290-
print res
295+
res = c.ListCommits(project.working_dir,options={"branch":filter})
291296
request.session["commits"] = res
292297
else:
293298
res = request.session["commits"]
299+
300+
if not "branchs" in request.session:
301+
if not c:
302+
server = Server.objects.get(name=request.session["deploy_server"])
303+
project = Project.objects.get(name=request.session["deploy_project"])
304+
c = Client("git", server.ip, server.port, key=project.sshKey.key)
305+
branches=c.ListBranchs(project.working_dir)
306+
else:
307+
branches=request.session["branchs"]
308+
request.session["branchs"]=branches
294309
table = CommitTable(res)
295310
table_to_report = RequestConfig(request, paginate={"per_page": 15}).configure(table)
296311
if table_to_report:
297312
return create_report_http_response(table_to_report, request)
298-
return render_to_response("deploy2.html", {"mode":"commits","commits": table}, context_instance=RequestContext(request))
313+
return render_to_response("deploy2.html", {"mode":"commits","commits": table,"branchs":branches,"current_branch":filter}, context_instance=RequestContext(request))
299314

300315

301316
@login_required(redirect_field_name="redirect")

0 commit comments

Comments
 (0)