summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Brown <ben.brown@codethink.co.uk>2017-05-23 16:02:38 +0000
committerBen Brown <ben.brown@codethink.co.uk>2017-05-23 16:02:38 +0000
commit31d156867ed3e09355dd487ecd0f919a6ce53be3 (patch)
tree9c4d587068981ac2e48c29fdd7ceecfd61909d57
parentaa8552e956b3e69c0854c675f7c786f1270de212 (diff)
parent1926c3db043289dce090e44fc82d45635e12b9b7 (diff)
downloadybd-31d156867ed3e09355dd487ecd0f919a6ce53be3.tar.gz
Merge branch 'benbrown/note-fixes' into 'master'
Miscellaneous/release note fixes See merge request !359
-rw-r--r--ybd/morphs.py5
-rw-r--r--ybd/pots.py5
-rw-r--r--ybd/release_note.py42
3 files changed, 29 insertions, 23 deletions
diff --git a/ybd/morphs.py b/ybd/morphs.py
index a9aa035..203401d 100644
--- a/ybd/morphs.py
+++ b/ybd/morphs.py
@@ -35,7 +35,10 @@ class Morphs(object):
for path in sorted(files):
data = self._load(path)
if data is not None:
- data['path'] = self._demorph(path[2:])
+ path = self._demorph(path)
+ if path.startswith('./'):
+ path = path[2:]
+ data['path'] = path
self._fix_keys(data)
self._tidy_and_insert_recursively(data)
diff --git a/ybd/pots.py b/ybd/pots.py
index d3641fb..3e37419 100644
--- a/ybd/pots.py
+++ b/ybd/pots.py
@@ -32,7 +32,7 @@ class Pots(object):
self._data = self._load_pots(config['filename'])
else:
log('DEFINITIONS', 'Loading definitions from morph files')
- self._data = Morphs()._data
+ self._data = Morphs(directory=directory)._data
self._trees = {}
self._set_trees()
@@ -79,7 +79,8 @@ class Pots(object):
try:
with open(os.path.join(config['artifacts'], '.trees')) as f:
text = f.read()
- self._trees = yaml.safe_load(text)
+ if text:
+ self._trees = yaml.safe_load(text)
count = 0
for path in self._data:
dn = self._data[path]
diff --git a/ybd/release_note.py b/ybd/release_note.py
index 8233d5d..eeecdf7 100644
--- a/ybd/release_note.py
+++ b/ybd/release_note.py
@@ -20,7 +20,9 @@ import tempfile
import app
from app import chdir, config, log
from morphs import Morphs
-from repos import explore, get_last_tag, get_repo_name, mirror, mirror_has_ref
+from repos import (
+ explore, get_last_tag, get_repo_name, mirror, mirror_has_ref, update_mirror
+)
def do_release_note(release_note):
@@ -59,20 +61,17 @@ def do_release_note(release_note):
def log_changes(dn, tmpdir, old_defs, ref):
do_git_log = False
- old_def = old_defs.get(dn['path'])
+ old_def = old_defs.get(dn['path'], {})
log_file = os.path.join(tmpdir, dn['name'])
with open(log_file, 'w') as f:
- keys = set(dn) - set(['tree', 'cache'])
+ keys = set(dn) - set(['tree', 'cache', 'repourl'])
for key in keys:
- try:
- old_value = old_def.get(key)
- except:
- old_value = None
+ old_value = old_def.get(key)
if dn[key] != old_value:
f.write('[%s] Value changed: %s\n' % (dn['path'], key))
- if type(dn[key]) is str:
+ if type(dn[key]) in (str, unicode, int):
f.write('%s | %s\n' % (old_value, dn[key]))
- if type(dn[key]) is not str and type(dn[key]) is not float:
+ if type(dn[key]) not in (str, unicode, int, float):
if old_value:
for x in old_value:
f.write(repr(x))
@@ -82,21 +81,24 @@ def log_changes(dn, tmpdir, old_defs, ref):
f.write(repr(x))
f.write('\n\n')
- if dn.get('kind', 'chunk') == 'chunk' and config.get('release-cmd'):
+ if (dn.get('kind', 'chunk') == 'chunk' and dn.get('repo') and
+ config.get('release-cmd') and old_def):
log(dn, 'Logging git change history', tmpdir)
try:
gitdir = os.path.join(config['gits'],
get_repo_name(dn['repo']))
- if not os.path.exists(gitdir):
- mirror(dn['name'], dn['repo'])
- elif not mirror_has_ref(gitdir, ref):
- update_mirror(dn['name'], dn['repo'], gitdir)
- with chdir(gitdir):
- text = dn['ref'] + '..'
- if old_def and old_def.get('ref'):
- text += old_def['ref']
- f.write(check_output(config['release-command'] + [text]))
- except:
+ cur_ref = dn.get('sha', dn['ref'])
+ old_ref = old_def.get('sha', old_def['ref'])
+ if old_ref != cur_ref:
+ if not os.path.exists(gitdir):
+ mirror(dn['name'], dn['repo'])
+ elif not mirror_has_ref(gitdir, cur_ref) or \
+ not mirror_has_ref(gitdir, old_ref):
+ update_mirror(dn['name'], dn['repo'], gitdir)
+ with chdir(gitdir):
+ text = cur_ref + '..' + old_ref
+ f.write(check_output(config['release-cmd'] + [text]))
+ except Exception:
log(dn, 'WARNING: Failed to log git changes')
if os.stat(log_file).st_size == 0:
os.remove(log_file)