Skip to content

Commit d507432

Browse files
committed
Sending Changes to the users by email
1 parent 85396ea commit d507432

File tree

9 files changed

+98
-23
lines changed

9 files changed

+98
-23
lines changed

client/autodeploy_client/Client.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,4 +125,15 @@ def getCommitsDiff(self,workdir,commit,owner=''):
125125
for item in res.split("\n"):
126126
if item=="" or item=="Done" : continue
127127
result.append(item)
128+
return result
129+
130+
def getChangeLog(self, workdir, since,to, owner=''):
131+
if owner == '':
132+
owner = Config.Owner
133+
msg = Job.createGetChangeLog(owner, workdir, self.scm,options={"since":since,"to":to})
134+
res = self._send(msg)
135+
result = []
136+
for item in res.split("\n"):
137+
if item == "" or item == "Done": continue
138+
result.append(item)
128139
return result

client/autodeploy_client/ClientJob.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,19 @@ def creategetCommitsDiffMessage(owner, workdir, commit, scm,options=None):
150150
f += '<workdir>%s</workdir>'%workdir
151151
f += '<commit>%s</commit>'%commit
152152

153+
if options:
154+
f += '<options>'
155+
for option in options.keys():
156+
f += "<option name='%s'>%s</option>" % (option, options[option])
157+
158+
f += "</options>"
159+
f += '</job>'
160+
return f
161+
162+
def createGetChangeLog(owner,workdir,scm,options=None):
163+
sec = base64.encodestring(importKey().encrypt(owner + scm + "LIST-CHANGES", "")[0])
164+
f = '<job owner="%s" type="%s" sec="%s" scm="%s">\n' % (owner, "LIST-CHANGES", sec, scm)
165+
f += '<workdir>%s</workdir>' % workdir
153166
if options:
154167
f += '<options>'
155168
for option in options.keys():

server/Config.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[Server]
22
port: 4567
3-
publicKey: /home/mohamed/autoDeploy/autoDeploy/server/client.pub
3+
publicKey: /home/mohamed/AutoDeploy/server/client.pub
44

server/Request.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,4 +173,24 @@ def parseSwitchCommitJob(message):
173173

174174

175175
def parseGetCommitDiff(message):
176-
return parseSwitchCommitJob(message)
176+
return parseSwitchCommitJob(message)
177+
178+
def parseGetChangeLog(message):
179+
params = {}
180+
optionsDict = {}
181+
doc = xml.dom.minidom.parseString(message)
182+
Job = doc.getElementsByTagName('job')[0]
183+
scm = Job.getAttribute("scm")
184+
workdir = getValue(Job, 'workdir')
185+
186+
requestType = Job.getAttribute('type')
187+
owner = Job.getAttribute('owner')
188+
options = (Job.getElementsByTagName('option'))
189+
for option in options:
190+
name = option.getAttribute("name")
191+
optionsDict[name] = option.firstChild.nodeValue
192+
193+
print 'Recieved New Job from ' + owner + '.....'
194+
params = {"workdir": workdir, "owner": owner, "requestType": requestType,
195+
"scm": scm, "options": optionsDict}
196+
return params

server/autodeploy-server.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,26 @@ def HandleClient(clientsock):
143143
if job["scm"]=="git":
144144
gclient=git.GIT(workdir=job["workdir"])
145145
cmd=gclient.commit_diff_cmd(commit=job["commit"])
146+
147+
elif req["requestType"]=="LIST-CHANGES":
148+
job = Request.parseGetChangeLog(msg)
149+
if job["scm"] == "git":
150+
gclient = git.GIT(workdir=job["workdir"])
151+
cmd = gclient.get_changelog(since=job["options"]["since"], to=job["options"]["to"])
152+
result = []
153+
res = Common.run(cmd)
154+
print res
155+
if "ERR:" in res:
156+
Response.sendData(clientsock, res)
157+
else:
158+
for line in res.split("\n"):
159+
try:
160+
if line != "":
161+
result.append(line.replace("*", "").strip())
162+
except:
163+
pass
164+
print result
165+
Response.sendData(clientsock, "\n".join(result))
146166
elif req["requestType"]=="DEPLOY":
147167
print msg
148168
job = Request.parseDeployJob(msg)

server/scm/Git.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,6 @@ def switch_to_histroy_cmd(self,commit):
4242
def commit_diff_cmd(self,commit):
4343
Common.run(self.get_pull_cmd())
4444
return 'git rev-list %s..HEAD'%(commit)
45+
def get_changelog(self,since,to):
46+
return "cd %s;git shortlog %s..%s"%(self.workdir,since,to)
47+

webapp/autoDeploy/autodeploy/api.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ def deploy(request):
3131
import Common
3232
server = Server.objects.get(name=request.session["deploy_server"])
3333
project = Project.objects.get(name=request.session["deploy_project"])
34+
last_Deployment=Deployment_Server.objects.filter(server=server,project=project).latest()
3435
D= Deployment_Server()
3536
c = Client(str(project.repo_type), server.ip, server.port)
3637
D.project = project
@@ -60,14 +61,36 @@ def deploy(request):
6061
link="http://"+server.DNS+project.deployment_link
6162
print link
6263
if project.emailUsers!="" or project.emailUsers!=" ":
63-
# for user in project.emailUsers.split(","):
64-
Common.send(project.emailUsers.replace(",",";"),"New version of %s deployed"%project.name,"Dear User,<br/> This is an automated notification that a new version of %s has been deployed at: %s"%(project.name,link),fromUser=None,cc="",bcc="",)
64+
changes=c.getChangeLog(project.working_dir,since=last_Deployment.update_version,to=request.GET["commit"])
65+
changes_text="<h3>Changes</h3><ul>"
66+
found=False
67+
for change in changes:
68+
if change.endswith(":"): continue
69+
changes_text+="<li>%s</li>"%change
70+
found=True
71+
if found:
72+
changes_text+="</ul>"
73+
else:
74+
changes_text=""
75+
Common.send(project.emailUsers.replace(",",";"),"New version of %s deployed"%project.name,"Dear User,<br/> This is an automated notification that a new version of %s has been deployed at: %s<br/>%s"%(project.name,link,changes_text),fromUser=None,cc="",bcc="",)
6576

6677
return HttpResponse(res+",,"+link)
6778
else:
6879
print "in else"
6980
link=project.deployment_link
7081
if project.emailUsers!="" or project.emailUsers!=" ":
71-
Common.send(project.emailUsers.replace(",",";"),"New version of %s deployed"%project.name,"Dear User,<br/> This is an automated notification that a new version of %s has been deployed at: %s"%(project.name,link),fromUser=None,cc="",bcc="",)
82+
changes=c.getChangeLog(project.working_dir,since=last_Deployment.update_version,to=request.GET["commit"])
83+
changes_text="<h3>Changes</h3><ul>"
84+
found=False
85+
for change in changes:
86+
if change.endswith(":"): continue
87+
changes_text+="<li>%s</li>"%change
88+
found=True
89+
if found:
90+
changes_text += "</ul>"
91+
else:
92+
changes_text = ""
93+
94+
Common.send(project.emailUsers.replace(",",";"),"New version of %s deployed"%project.name,"Dear User,<br/> This is an automated notification that a new version of %s has been deployed at: %s.<br>%s"%(project.name,link,changes_text),fromUser=None,cc="",bcc="",)
7295
return HttpResponse(res+",,"+link)
7396
else: return HttpResponse(res)

webapp/autoDeploy/autodeploy/models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ class Deployment_Server(models.Model):
5555
project = models.ForeignKey(Project)
5656
server = models.ForeignKey(Server)
5757

58+
class Meta:
59+
get_latest_by="id"
60+
5861
class Plugins(models.Model):
5962
name=models.CharField(max_length=50)
6063
settings=models.TextField()

webapp/autoDeploy/media/AutoDeploy/autodeploy.yaml

Lines changed: 0 additions & 18 deletions
This file was deleted.

0 commit comments

Comments
 (0)