Hello,

Bump NVR to 6.1.
Pushed to master: 5adca1bbfc2c19c53ecda649b94960f6abe73cf6

Add release engineering tools to source tree.
Pushed to master: b85fed4c4512537d9dce39f525c556a02e436753

Update NEWS for upcoming 6.1 release.
Pushed to master: e92d96de044c1b1a36d1d1a2a444656278edf0a6

Update .gitignore to skip compile script from Autotools.
Pushed to master: 75a706252bf816cbe236791e187c80d83774ad7d

-- 
Petr^2 Spacek
From 75a706252bf816cbe236791e187c80d83774ad7d Mon Sep 17 00:00:00 2001
From: Petr Spacek <pspa...@redhat.com>
Date: Fri, 28 Nov 2014 10:09:30 +0100
Subject: [PATCH] Update .gitignore to skip compile script from Autotools.

---
 .gitignore | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitignore b/.gitignore
index 40dfa22c5c8485ef0a4228ac6f5dede3730f9320..04a689bf723c287b47eb46a3a343d0a376cb2080 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,6 +10,7 @@ Makefile.in
 /aclocal.m4
 /autom4te.cache
 /ar-lib
+/compile
 /config.guess
 /config.h.in
 /config.sub
-- 
2.1.0

From e92d96de044c1b1a36d1d1a2a444656278edf0a6 Mon Sep 17 00:00:00 2001
From: Petr Spacek <pspa...@redhat.com>
Date: Fri, 28 Nov 2014 10:10:40 +0100
Subject: [PATCH] Update NEWS for upcoming 6.1 release.

---
 NEWS | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/NEWS b/NEWS
index f88d8552d34a774f684081f14340208cdf00a43b..313151ab197e4529def7953a1fbffa8fc3e8c5a7 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,17 @@
+6.1
+====
+[1] Crash caused by interaction between forward and master zones was fixed.
+    https://fedorahosted.org/bind-dyndb-ldap/ticket/145
+
+[2] DNS NOTIFY messages are sent after any modification to the zone.
+    https://fedorahosted.org/bind-dyndb-ldap/ticket/144
+
+[3] Misleading error message about forward zones during reconnect was fixed.
+
+[4] Informational message about number of defined/loaded zones was improved.
+
+[5] Various build system improvements.
+
 6.0
 ====
 [1] idnsZoneActive attribute is supported again and zones can be activated
-- 
2.1.0

From b85fed4c4512537d9dce39f525c556a02e436753 Mon Sep 17 00:00:00 2001
From: Petr Spacek <pspa...@redhat.com>
Date: Fri, 28 Nov 2014 13:40:52 +0100
Subject: [PATCH] Add release engineering tools to source tree.

See releng/README for details.
---
 .gitignore           |  4 +++
 releng/README        | 33 ++++++++++++++++++
 releng/bumpver.py    | 86 +++++++++++++++++++++++++++++++++++++++++++++++
 releng/srcversion.py | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 releng/trac.py       | 39 +++++++++++++++++++++
 releng/tracvers.py   | 44 ++++++++++++++++++++++++
 6 files changed, 301 insertions(+)
 create mode 100644 releng/README
 create mode 100755 releng/bumpver.py
 create mode 100755 releng/srcversion.py
 create mode 100644 releng/trac.py
 create mode 100755 releng/tracvers.py

diff --git a/.gitignore b/.gitignore
index 04a689bf723c287b47eb46a3a343d0a376cb2080..53d7ed414ab0ee45afa2cb8ac84e8ab23de358ac 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,3 +25,7 @@ Makefile.in
 .project
 .cproject
 .settings
+
+# Python
+*.pyc
+__pycache__
diff --git a/releng/README b/releng/README
new file mode 100644
index 0000000000000000000000000000000000000000..8bdb1693077a54f3c910643a354725a9ebc93d17
--- /dev/null
+++ b/releng/README
@@ -0,0 +1,33 @@
+Release Engineering
+===================
+Latest cheat sheet is available on:
+https://fedorahosted.org/bind-dyndb-ldap/wiki/ReleaseProcess
+
+This directory contains assorted set of tools related to release enginnering.
+All scripts should be run from root of the source tree.
+
+NOTE!
+Scripts can make changes in local repo so all changes should be carefully
+reviewed before git push!
+
+Final push to remore repo has to be done manually.
+
+
+User scripts
+------------
+
+bumpver.py
+~~~~~~~~~~
+Increments version number in configure.ac and SPEC file and creates a signed
+tag for current release.
+
+tracvers.py
+~~~~~~~~~~~
+Creates Trac version for each Git tag.
+
+
+Auxiliary scripts
+-----------------
+These scripts are not intended for usage from command line:
+- srcversion.py
+- trac.py
diff --git a/releng/bumpver.py b/releng/bumpver.py
new file mode 100755
index 0000000000000000000000000000000000000000..191ff2ffe68451f88ae112718a8ea961216b7e3d
--- /dev/null
+++ b/releng/bumpver.py
@@ -0,0 +1,86 @@
+#!/usr/bin/env python
+
+"""
+Bump version number in source tree, commit and tag resulting tree.
+
+Usage:
+- bumpver.py -> bump minor version by 1
+- bumpver.py 6.1 -> set major and minor versions to 6.1
+
+Assumptions:
+- README file was updated & commited by hand.
+
+Checks:
+- Working directory is clean.
+- NEWS file contains notes for new version.
+
+Actions:
+- Bump version in configure.ac & bind-dyndb-ldap.spec.
+- Commits bumped version.
+- Tags new version.
+"""
+
+import logging
+import re
+from subprocess import check_output, check_call
+import sys
+
+from srcversion import FileVersion, FakeVersion
+
+logging.basicConfig(level=logging.DEBUG)
+log = logging.getLogger('bump')
+
+def bump_version(cur_version):
+    """Bump minor version by 1 OR return specified version if one was given
+    on commandline. """
+    if len(sys.argv) == 1:
+        major = cur_version.major
+        minor = cur_version.minor + 1
+    elif len(sys.argv) == 2:
+        try:
+            major, minor = sys.argv[1].split('.')
+        except ValueError:
+            log.critical('Version number has to have format <major.minor>')
+            sys.exit(4)
+
+    return FakeVersion(major, minor)
+
+def expect_clean_workdir():
+    gstatus = check_output(['git', 'status', '--porcelain'])
+    if gstatus.strip():
+        log.critical('Working directory is not clean:\n%s', gstatus)
+        sys.exit(1)
+
+expect_clean_workdir()
+
+# get current version
+file_version = FileVersion()
+
+# compute new version
+new_version = bump_version(file_version)
+log.info('New version: %s' % new_version)
+
+# check that new version is in NEWS file
+with open('NEWS') as fnews:
+    regex = '(^|\n)%s.%s\n====\n' % (new_version.major, new_version.minor)
+    if not re.search(regex, fnews.read()):
+        log.fatal('NEWS file does not contain version %s', new_version)
+        sys.exit(2)
+log.debug('NEWS file seems okay')
+
+# write new version
+file_version.major = new_version.major
+file_version.minor = new_version.minor
+
+# commit version bump
+log.debug('Add modified files to git index')
+log.info(check_output(['git', 'add'] + file_version.files))
+log.info(check_output(['git', 'commit', '-m', 'Bump NVR to %s.' % file_version]))
+check_call(['git', 'show'])
+
+# working directory should be clean if we did not mess things up
+expect_clean_workdir()
+
+# tag new version
+ver_str = "v%s" % str(file_version)
+check_call(['git', 'tag', '-s', '-m', 'Release %s.' % ver_str, ver_str])
diff --git a/releng/srcversion.py b/releng/srcversion.py
new file mode 100755
index 0000000000000000000000000000000000000000..f9176f526f2dc70dd02e7cd3ae5a6458db7070c6
--- /dev/null
+++ b/releng/srcversion.py
@@ -0,0 +1,95 @@
+#!/usr/bin/env python
+
+"""
+Interface for version information in bind-dyndb-ldap source tree.
+"""
+
+import logging
+import re
+
+log = logging.getLogger('version')
+
+class FakeVersion(object):
+    """
+    Read-only object with FileVersion-like interface.
+    """
+    def __init__(self, major, minor):
+        self._major = int(major)
+        self._minor = int(minor)
+
+    @property
+    def major(self):
+        return self._major
+
+    @property
+    def minor(self):
+        return self._minor
+
+    def __str__(self):
+        return "%s.%s" % (self.major, self.minor)
+
+
+class FileVersion(FakeVersion):
+    """
+    Read/write interface for version information in configure.ac
+    and bind-dyndb-ldap.spec.
+    """
+    def __init__(self):
+        self.configureac_regex = '(?<=\nAC_INIT\(\[bind-dyndb-ldap\], \[)(?P<major>[0-9]+)\.(?P<minor>[0-9]+)(?=\], \[freeipa-devel@redhat\.com\]\)\n)'
+        self.files = ['configure.ac', 'contrib/bind-dyndb-ldap.spec']
+
+    def _get_ver(self):
+        """return RE match object from configure.ac"""
+        with open('configure.ac') as fconfigureac:
+            configureac = fconfigureac.read()
+            return re.search(self.configureac_regex, configureac)
+
+    def _write_ver(self, new_ver):
+        """write new version to configure.ac and bind-dyndb-ldap.spec"""
+        log.debug('Writing new version %s to configure.ac', new_ver)
+        with open('configure.ac', 'r+') as fconfigureac:
+            configureac = fconfigureac.read()
+            new_config = re.sub(self.configureac_regex, new_ver, configureac)
+            fconfigureac.seek(0)
+            fconfigureac.write(new_config)
+            fconfigureac.truncate()
+
+        log.debug('Writing new version %s to bind-dyndb-ldap.spec', new_ver)
+        with open('contrib/bind-dyndb-ldap.spec', 'r+') as fspec:
+            # look-ahead regex requires fixed length prefix which we don't have
+            regex = '(\nVersion:\s+)(\S+)(?=\n)'
+            old_spec = fspec.read()
+            matches = re.search(regex, old_spec)
+            if not matches:
+                raise ValueError('Cannot find Version line in .spec')
+            replacement = matches.group(1) + new_ver
+            new_spec = re.sub(regex, replacement, old_spec)
+            fspec.seek(0)
+            fspec.write(new_spec)
+            fspec.truncate()
+
+    @property
+    def major(self):
+        ver = int(self._get_ver().group("major"))
+        log.debug('Major version is %s', ver)
+        return ver
+
+    @major.setter
+    def major(self, value):
+        new_ver = "%s.%s" % (value, self.minor)
+        self._write_ver(new_ver)
+
+    @property
+    def minor(self):
+        ver = int(self._get_ver().group("minor"))
+        log.debug('Minor version is %s', ver)
+        return ver
+
+    @minor.setter
+    def minor(self, value):
+        new_ver = "%s.%s" % (self.major, value)
+        self._write_ver(new_ver)
+
+if __name__ == "__main__":
+    logging.basicConfig(level=logging.DEBUG)
+    log.info("bind-dyndb-ldap version is %s", FileVersion())
diff --git a/releng/trac.py b/releng/trac.py
new file mode 100644
index 0000000000000000000000000000000000000000..6301d6b7beb5d1cea76c3b98f5292f8b3ef47eeb
--- /dev/null
+++ b/releng/trac.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python3
+
+import logging
+import os
+import re
+import json
+import xmlrpc.client
+
+log = logging.getLogger('trac')
+
+class Trac():
+    def __init__(self, protocol, url, username, passwd):
+        self.baseurl = '%s://%s' % (protocol, url)
+        loginurl = '%s://%s:%s@%s/login/xmlrpc' % (protocol, username, passwd, url)
+        self.api = xmlrpc.client.ServerProxy(loginurl)
+    
+    def match_ticket_url(self, line):
+        return re.match("^ +%s/ticket/([0-9]+) *$" % self.baseurl, line)
+
+    def get_ticket_attrs(self, ticketid):
+        ticket = self.api.ticket.get(ticketid)
+        assert str(ticket[0]) == str(ticketid)
+        return ticket[3]
+
+def trac_autoconf():
+    """
+    Configuration file format is:
+    {"protocol": "https",
+     "url": "fedorahosted.org/bind-dyndb-ldap",
+     "username": "FedoraUserName",
+     "passwd": "FedoraPassword"}
+    """
+    config = json.load(open(os.path.expanduser('~/.trac')))
+    return Trac(**config)
+
+if __name__ == "__main__":
+    t = trac_autoconf()
+    logging.basicConfig(level=logging.DEBUG)
+    log.debug(t.api)
diff --git a/releng/tracvers.py b/releng/tracvers.py
new file mode 100755
index 0000000000000000000000000000000000000000..8436976304dfb282e8cf5ff445dd374c220856fe
--- /dev/null
+++ b/releng/tracvers.py
@@ -0,0 +1,44 @@
+#!/usr/bin/env python3
+
+"""
+Create Trac version for each Git tag.
+"""
+
+from datetime import datetime
+import logging
+from subprocess import check_output, check_call
+
+from trac import trac_autoconf
+
+logging.basicConfig(level=logging.DEBUG)
+log = logging.getLogger('tracver')
+
+tr = trac_autoconf()
+
+# version in Trac has format '1.2'
+trac_versions = set()
+for ver in tr.api.ticket.version.getAll():
+    trac_versions.add("v%s" % ver)
+log.debug('Trac versions: %s', trac_versions)
+
+# version in Git is tag named like 'v1.2'
+git_versions = set()
+for tag in check_output(['git','tag']).decode('ascii').strip().split('\n'):
+    # these are sins of young developers
+    if tag == 'v0.1.0-b' or tag == 'v0.1.0-a1':
+        tag = tag.translate({ord('-'): None})
+    git_versions.add(tag)
+log.debug('Git versions: %s', git_versions)
+
+new_versions = git_versions - trac_versions
+log.debug('New versions missing in Trac: %s', new_versions)
+
+# add new versions to Trac
+for tag in new_versions:
+    time = check_output(['git', 'log', '--format=format:%ai', '%s~1..%s'
+        % (tag, tag)]).decode('ascii').strip()
+    time = datetime.strptime(time, "%Y-%m-%d %H:%M:%S %z")
+    version = tag[1:]
+    log.info('Adding version %s with timestamp %s', version, time)
+    tr.api.ticket.version.create(version, {'time': time, 'description': ''})
+
-- 
2.1.0

From 5adca1bbfc2c19c53ecda649b94960f6abe73cf6 Mon Sep 17 00:00:00 2001
From: Petr Spacek <pspa...@redhat.com>
Date: Fri, 28 Nov 2014 16:00:20 +0100
Subject: [PATCH] Bump NVR to 6.1.

---
 configure.ac                 | 2 +-
 contrib/bind-dyndb-ldap.spec | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/configure.ac b/configure.ac
index d12ef7bb8c32f320e872d74405b980ced9bd28d8..9f8f07c01e3feefe4254f73203bbc06b2bce28cd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
 AC_PREREQ([2.59])
-AC_INIT([bind-dyndb-ldap], [6.0], [freeipa-devel@redhat.com])
+AC_INIT([bind-dyndb-ldap], [6.1], [freeipa-devel@redhat.com])
 
 AM_INIT_AUTOMAKE([-Wall foreign dist-bzip2])
 
diff --git a/contrib/bind-dyndb-ldap.spec b/contrib/bind-dyndb-ldap.spec
index 574519982463d811c482bdaaa70839e2c15e9e12..01f083bcd57bbdc939840c036a53771a8e0ebcfa 100644
--- a/contrib/bind-dyndb-ldap.spec
+++ b/contrib/bind-dyndb-ldap.spec
@@ -1,7 +1,7 @@
 %define VERSION %{version}
 
 Name:           bind-dyndb-ldap
-Version:        6.0
+Version:        6.1
 Release:        0%{?dist}
 Summary:        LDAP back-end plug-in for BIND
 
-- 
2.1.0

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to