aboutsummaryrefslogtreecommitdiffstats
path: root/camel
diff options
context:
space:
mode:
authorLarry Ewing <lewing@helixcode.com>2000-05-03 11:35:31 +0800
committerLarry Ewing <lewing@src.gnome.org>2000-05-03 11:35:31 +0800
commitf27621c3a268ed5ea9ff320d6d049bac76e28a37 (patch)
treed7f32aeb183c8409b65243429ca500dc5f99386e /camel
parentc1f78a7de7d2cd2cb9d3093189caee4686058f5e (diff)
downloadgsoc2013-evolution-f27621c3a268ed5ea9ff320d6d049bac76e28a37.tar.gz
gsoc2013-evolution-f27621c3a268ed5ea9ff320d6d049bac76e28a37.tar.zst
gsoc2013-evolution-f27621c3a268ed5ea9ff320d6d049bac76e28a37.zip
fix typo when dereferencing saveoffset.
2000-05-02 Larry Ewing <lewing@helixcode.com> * camel-mime-utils.c (header_decode_date): fix typo when dereferencing saveoffset. svn path=/trunk/; revision=2771
Diffstat (limited to 'camel')
-rw-r--r--camel/ChangeLog5
-rw-r--r--camel/camel-mime-utils.c2
2 files changed, 6 insertions, 1 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog
index b9492d0d9b..d65d890542 100644
--- a/camel/ChangeLog
+++ b/camel/ChangeLog
@@ -1,3 +1,8 @@
+2000-05-02 Larry Ewing <lewing@helixcode.com>
+
+ * camel-mime-utils.c (header_decode_date): fix typo when
+ dereferencing saveoffset.
+
2000-05-02 NotZed <NotZed@HelixCode.com>
* camel-folder-search.c: Added some header doco.
diff --git a/camel/camel-mime-utils.c b/camel/camel-mime-utils.c
index 7967ff8e45..6c9645b6c8 100644
--- a/camel/camel-mime-utils.c
+++ b/camel/camel-mime-utils.c
@@ -1845,7 +1845,7 @@ header_decode_date(const char *in, int *saveoffset)
time_t t;
if (in == NULL) {
- if (*saveoffset)
+ if (saveoffset)
*saveoffset = 0;
return 0;
}
213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306
#!/usr/bin/env python

import os
import re
import urllib
import csv
import datetime
import time
from string import Template
from optparse import OptionParser

last_tag_patern = 'EMPATHY_2_29*'
upload_server = 'master.gnome.org'
template = '''\
$name $version is now available for download from:
$download

$md5sums

What is it?
===========
$about

You can visit the project web site:
$website

What's New?
===========
$news

$footer'''

class Bug:
    number = ''
    author = ''

class Project:
    def __init__(self):
        f = open('config.h', 'r')
        s = f.read()
        f.close()

        key = {}
        key['package'] = '#define PACKAGE_NAME "'
        key['version'] = '#define PACKAGE_VERSION "'
        key['bugreport'] = '#define PACKAGE_BUGREPORT "'

        for line in s.splitlines(1):
            if line.startswith(key['package']):
                p1 = len(key['package'])
                p2 = line.rfind('"')
                self.package_name = line[p1:p2]         
            elif line.startswith(key['version']):
                p1 = len(key['version'])
                p2 = line.rfind('"')
                self.package_version = line[p1:p2]      
            elif line.startswith(key['bugreport']):
                p2 = line.rfind('"')
                p1 = line.rfind('=') + 1
                self.package_module = line[p1:p2]       

        first = self.package_version.find('.')
        second = self.package_version.find('.', first + 1)
        if first == -1 or second == -1 or first == second:
            version_dir = self.package_version
        else:
            version_dir = self.package_version[:second]
        self.package_dl_url = 'http://download.gnome.org/sources/%s/%s/' % (self.package_name.lower(), 
                                            version_dir)
        tags_str = self.exec_cmd('git tag -l %s' % (last_tag_patern))
        tags = tags_str.splitlines()
        self.last_tag = tags[len(tags)-1]

    def exec_cmd(self,cmd):
        return os.popen(cmd).read()

    def get_news(self):
        f = open ('NEWS', 'r')
        s = f.read()
        f.close()
        start = s.find ('NEW in '+ self.package_version)
        if start != -1:
            start = s.find ('\n', start) + 1
            start = s.find ('\n', start) + 1
                end = s.find ('NEW in', start) - 1
                return s[start:end].strip()

    def get_md5sums(self):
        md5sums = ''

        cmd = 'md5sum %s-%s.tar.gz' % (self.package_name.lower(), self.package_version)
        md5sums += self.exec_cmd(cmd)

        cmd = 'md5sum %s-%s.tar.bz2' % (self.package_name.lower(), self.package_version)
        md5sums += self.exec_cmd(cmd).strip()

        return md5sums

    def get_bugzilla_info(self):
        query = 'http://bugzilla.gnome.org/browse.cgi?product=%s' % (self.package_module)
        f = urllib.urlopen(query)
        s = f.read()
        f.close()

        s1 = '<p><i>'
        i = s.find(s1)
        start = i + len(s1)
        s2 = '</i></p>'
        end = s.find(s2, i + 1)
        description = s[start:end]

        s1 = "homepage"
        i = s.find(s1)
        s1 = "href"
        i = s.rfind(s1, 0, i)
        start = i + 6
        s2 = '">'
        end = s.find(s2, start)
        project_url = s[start:end]

        return (description, project_url)

    def get_release_notes(self):
        name = self.package_name
        version = self.package_version
        download = self.package_dl_url
        md5sums = self.get_md5sums()
        (about, website) = self.get_bugzilla_info()
        news = self.get_news()
        footer = '%s\n%s team' % (datetime.date.today().strftime('%d %B %Y'),\
                      self.package_name)

        t = Template(template)
        return t.substitute(locals())
    
    def get_translations(self, cmd, format):
        translations = ''
        files_str = self.exec_cmd(cmd)
        files = files_str.splitlines()
        for line in files:
            f = line[line.rfind(' '):]
            lang = f[f.rfind('/')+1:f.rfind('.')]
            commit_str = self.exec_cmd("git log %s..  %s" % (self.last_tag, f))
            if commit_str == '':
                continue

            authors = ''
            for line in commit_str.splitlines():
                if line.startswith('Author:'):
                        p1 = line.find(' ')
                        p2 = line.find('<')
                        author = line[p1:p2].strip()

                    if authors.find(author) != -1:
                        continue
                        if authors != '':
                            authors += ", "
                        authors += author

            translations += format % (lang, authors)
        return translations

    def get_bug_author(self, bug_number):
        cmd = 'git log %s.. | grep -B 20 -E "(bug %s|#%s)"' \
              ' | tac | grep ^Author: | head -1' \
              % (self.last_tag, bug_number, bug_number)
        line = self.exec_cmd (cmd)
        p1 = line.find(" ")
        p2 = line.find("<")

        return line[p1:p2].strip()

    def get_bugs(self):
        commit_str = self.exec_cmd('git show %s' % (self.last_tag))
        for line in commit_str.splitlines():
            if line.startswith('Date:'):
                time_str = line[5:line.rfind('+')].strip()
                t = time.strptime(time_str)
                last_tag_date = time.strftime('%Y-%m-%d', t)
                break

        query = 'http://bugzilla.gnome.org/buglist.cgi?' \
            'ctype=csv&product=empathy&' \
            'bug_status=RESOLVED,CLOSED,VERIFIED&resolution=FIXED&' \
            'chfieldfrom=%s&chfieldto=Now' % (last_tag_date)
        f = urllib.urlopen(query)
        s = f.read()
        f.close()

        col_bug_id = -1
        col_description = -1

        reader = csv.reader(s.splitlines(1))
        header = reader.next()
        i = 0

        for col in header:
            if col == 'bug_id':
                col_bug_id = i
            if col == 'short_short_desc':
                col_description = i
            i = i + 1

        bugs = ''
        for row in reader:
            bug_number = row[col_bug_id]
            description = row[col_description]
            author = self.get_bug_author(bug_number)
            bugs += ' - Fixed #%s, %s' % (bug_number, description)
            if author != '':
                bugs += ' (%s)' % (author)
            bugs += '\n'
        return bugs

    def generate_news(self):
        translations = self.get_translations("ls -l po/*.po", \
            " - Updated %s Translation (%s)\n")
        help_translations = self.get_translations("ls -l help/*/*.po", \
            " - Updated %s Documentation translation (%s)\n")
        bugs = self.get_bugs()

        news = 'NEW in '+ self.package_version + '\n==============\n'
        if bugs != '':
            news += 'Bugs fixed:\n' + bugs + '\n'
        if translations != '':
            news += 'Translations:\n' + translations + '\n'
        if help_translations != '':
            news += 'Documentation translations:\n' + \
                    help_translations + '\n'

        return news

    def write_news(self):
        news = self.generate_news()

        f = open ('/tmp/NEWS', 'w')
        s = f.write(news)
        f.close()

        self.exec_cmd('cat NEWS >> /tmp/NEWS')
        self.exec_cmd('mv /tmp/NEWS .')

    def make_tag(self):
        new_tag = self.package_name.upper() + '_' +\
              self.package_version.replace('.', '_')
        self.exec_cmd('git tag -m "Tagged for release %s." %s' % ( self.package_version, new_tag))

    def _get_username(self):
        username = os.environ.get('GNOME_ACCOUNT_NAME')
        if username is not None:
            return username
            
        return os.getlogin()
        

    def upload_tarball(self):
        username = self._get_username()
        tarball = '%s-%s.tar.gz' % (self.package_name.lower(), self.package_version)

        cmd = 'scp %s %s@%s:' % (tarball, username, upload_server)
        self.exec_cmd(cmd)

        cmd = 'ssh %s@%s install-module -u %s' % (username, upload_server, tarball)
        self.exec_cmd(cmd)

    def send_email(self):
        notes = self.get_release_notes()
        cmd = 'xdg-email ' \
              ' --cc telepathy@lists.freedesktop.org' \
              ' --subject "ANNOUNCE: Empathy %s"' \
              ' --body "%s"' \
              ' gnome-announce-list@gnome.org' % (self.package_version,
                                  notes.replace('"', '\\"'))
        self.exec_cmd(cmd)

    def release(self):
        self.make_tag()
        self.upload_tarball()
        self.send_email()

if __name__ == '__main__':
    p = Project()
    parser = OptionParser()
    parser.add_option("-n", "--print-news", action="store_true",\
        dest="print_news", help="Generate and print news")
    parser.add_option("-p", "--print-notes", action="store_true",\
        dest="print_notes", help="Generate and print the release notes")
    parser.add_option("-w", "--write-news", action="store_true",\
        dest="write_news", help="Generate and write news into the NEWS file")
    parser.add_option("-r", "--release", action="store_true",\
        dest="release", help="Release the tarball")
    parser.add_option("-e", "--email", action="store_true",\
        dest="email", help="Send the release announce email")

    (options, args) = parser.parse_args ()
    if (options.print_news):
        print p.generate_news ()
    if (options.print_notes):
        print p.get_release_notes ()
    if (options.write_news):
        p.write_news ()
    if (options.release):
        p.release ()
    if (options.email):
        p.send_email ()