#!/usr/bin/python # # Hack par CC 13/07/1999 pour envoyer sur crans.cvs-checkins un # compte-rendu d'activité de ce qui se passe... # # modif par SamK 22/11/99: splitter les lignes, sinon nntplib refuse le message # si ya des lignes trop longues.. # # modif par OS 15/05/00 ajout d'un Reply-To... # # Ajouts par NS 13/02/03 : signature qui explique un peu ce qui se passe, et # création automatique d'un lien vers la page webcvs qui présente le diff. # # Intimement lié à CVSROOT/loginfo # import nntplib,string,os,StringIO def LFsplit(s): res="" while len(s)>80 : pos=string.find(s,' ',65,80) if pos < 0 : res=res+s[0:75]+'\n' s=s[75:len(s)+1] else : res=res+s[0:pos]+'\n' s=s[pos+1:len(s)+1] if len(s)>0: res=res+s return res for uid in os.listdir('/var/cvs'): try: so = [] fi = open('/var/cvs/'+uid,'r') so.append("From: CVS admin \n" + \ ("Subject: CVS Commit par %s\n" % uid)+ \ "Organization: Crans Internet Site\n" + \ "Newsgroups: crans.cvs-checkins\n" + \ "Reply-To: Nounous \n" + \ "Followup-To: crans.informatique\n" ) so.append("MIME-Version: 1.0\n" + \ "Content-Type: text/plain\n") so.append("\n") envoie = 0 links_base="http://www.crans.org/cgi-bin/cvsweb" while 1: s = fi.readline() if not s: break envoie = 1 links=['Liens vers les diffs sur cvsweb :\n'] diffok = 0 # On essaye de créer les liens vers cvsweb automatiquement. try: if s[0:3]=="web": link=string.split(s) for file in link[1:]: file=string.split(file,",") if not string.split(file[0],".")[-1] in ['jpg','jpeg','gif','png']: links.append("%s/%s/%s.diff?r1=%s&r2=%s\n" % (links_base,link[0],file[0],file[1],file[2])) diffok = 1 # S'il y a au moins un diff affichable, on donne le lien. if diffok: links.append('\n') s=string.join(links,'') else: s=LFsplit(s) so.append(s) except: so.append(s) # Avec une signature c'est plus propre. so.append("\n" + \ "-- \n" + \ "Notification automatique des CVS commits sur le site du CR@NS.\n"+ \ "Voir http://www.crans.org/cgi-bin/cvsweb/web/ pour accéder aux archives CVS complètes.") # maintenant, on envoie : if envoie: sso = string.join(so,'') fso = StringIO.StringIO(sso) nntplib.NNTP('news.crans.org').post(fso) #print sso os.unlink('/var/cvs/'+uid) except: raise