Skip to content

Commit

Permalink
initial work for screed release
Browse files Browse the repository at this point in the history
versioneer install and setup
creation of release procedure notes
creation of known_issues doc
  • Loading branch information
bocajnotnef committed Nov 25, 2014
1 parent d8ed05b commit 90994a6
Show file tree
Hide file tree
Showing 10 changed files with 1,160 additions and 1 deletion.
1 change: 1 addition & 0 deletions .gitattributes
@@ -0,0 +1 @@
screed/_version.py export-subst
9 changes: 9 additions & 0 deletions ChangeLog
@@ -1,3 +1,8 @@
2014-11-2 Michael Crusoe <mcrusoe@msu.edu>

* Doxyfile, .coverage, coverage.xml, diff-cover.html, doc/doxygen/, env/
htmlcov/, nosetests.xml, pylint_report.txt, .*.swp: added Doxygen support

2014-10-27 Ben Taylor <taylo886@msu.edu>

* benchmarks/fqGen.py, benchmarks/fqToFaConvert.py,
Expand All @@ -6,3 +11,7 @@
doc/screed.html, doc/screed.txt, screed/conversion.py, screed/fastq.py,
screed/tests/test_fastq.py: Changed all uses of "accuracy" to "quality"
* screed/tests/test_dna.py: Added basic test coverage for screed/dna.py

2014-5-16 Michael Crusoe <mcrusoe@msu.edu>

* screed/openscreed.py: added sniffing of compression types, including zip
2 changes: 2 additions & 0 deletions MANIFEST.in
@@ -0,0 +1,2 @@
include versioneer.py
include screed/_version.py
1 change: 1 addition & 0 deletions doc/index.txt
Expand Up @@ -18,6 +18,7 @@ Contents:

screed
example
releases

Indices and tables
==================
Expand Down
23 changes: 23 additions & 0 deletions doc/known-issues.txt
@@ -0,0 +1,23 @@
.. vim: set filetype=rst
============
Known Issues
============

This document details the known issues in the current release of screed. All
issues for screed are tracked at https://github.com/ged-lab/khmer/issues

List of known issues
====================

Screed currently does not support streaming of any filetypes.
https://github.com/ged-lab/khmer/issues/654
https://github.com/ged-lab/khmer/issues/633

Screed has issues with pair checking and Fastq ID stripping
https://github.com/ged-lab/khmer/issues/23
https://github.com/ged-lab/khmer/issues/606

Screed is overly tolerant of spaces in fast{q,a} which is against spec.
https://github.com/ged-lab/khmer/issues/108


24 changes: 24 additions & 0 deletions doc/releases.txt
@@ -0,0 +1,24 @@
=====================
Release Documentation
=====================

Notes on this document
======================
This is the procedure for cutting a new release of screed. It has been adapted
from the release documentation for the khmer project, found at
http://khmer.readthedocs.org/en/v1.1/release.html.

Getting Started
===============

#. Start with a clean checkout:
cd `mktemp -d`
git clone git@github.com:ged-lab/screed.git
cd screed
#. Install/update versioneer:
pip install versioneer
versioneer-installer
#. Review the git logs since the previous release and that ChangeLog reflects
the major changes
#. Review the issue list for any existing bugs that won't be fixed in the
release and ensure they're documented in ``doc/known-issues.txt``
4 changes: 4 additions & 0 deletions screed/__init__.py
Expand Up @@ -31,3 +31,7 @@
from dna import rc

__version__ = '0.7.1'

from ._version import get_versions
__version__ = get_versions()['version']
del get_versions
183 changes: 183 additions & 0 deletions screed/_version.py
@@ -0,0 +1,183 @@

# This file helps to compute a version number in source trees obtained from
# git-archive tarball (such as those provided by githubs download-from-tag
# feature). Distribution tarballs (built by setup.py sdist) and build
# directories (produced by setup.py build) will contain a much shorter file
# that just contains the computed version number.

# This file is released into the public domain. Generated by
# versioneer-0.12 (https://github.com/warner/python-versioneer)

# these strings will be replaced by git during git-archive
git_refnames = "$Format:%d$"
git_full = "$Format:%H$"

# these strings are filled in when 'setup.py versioneer' creates _version.py
tag_prefix = "v"
parentdir_prefix = "."
versionfile_source = "screed/_version.py"

import os, sys, re, subprocess, errno

def run_command(commands, args, cwd=None, verbose=False, hide_stderr=False):
assert isinstance(commands, list)
p = None
for c in commands:
try:
# remember shell=False, so use git.cmd on windows, not just git
p = subprocess.Popen([c] + args, cwd=cwd, stdout=subprocess.PIPE,
stderr=(subprocess.PIPE if hide_stderr
else None))
break
except EnvironmentError:
e = sys.exc_info()[1]
if e.errno == errno.ENOENT:
continue
if verbose:
print("unable to run %s" % args[0])
print(e)
return None
else:
if verbose:
print("unable to find command, tried %s" % (commands,))
return None
stdout = p.communicate()[0].strip()
if sys.version >= '3':
stdout = stdout.decode()
if p.returncode != 0:
if verbose:
print("unable to run %s (error)" % args[0])
return None
return stdout


def versions_from_parentdir(parentdir_prefix, root, verbose=False):
# Source tarballs conventionally unpack into a directory that includes
# both the project name and a version string.
dirname = os.path.basename(root)
if not dirname.startswith(parentdir_prefix):
if verbose:
print("guessing rootdir is '%s', but '%s' doesn't start with prefix '%s'" %
(root, dirname, parentdir_prefix))
return None
return {"version": dirname[len(parentdir_prefix):], "full": ""}

def git_get_keywords(versionfile_abs):
# the code embedded in _version.py can just fetch the value of these
# keywords. When used from setup.py, we don't want to import _version.py,
# so we do it with a regexp instead. This function is not used from
# _version.py.
keywords = {}
try:
f = open(versionfile_abs,"r")
for line in f.readlines():
if line.strip().startswith("git_refnames ="):
mo = re.search(r'=\s*"(.*)"', line)
if mo:
keywords["refnames"] = mo.group(1)
if line.strip().startswith("git_full ="):
mo = re.search(r'=\s*"(.*)"', line)
if mo:
keywords["full"] = mo.group(1)
f.close()
except EnvironmentError:
pass
return keywords

def git_versions_from_keywords(keywords, tag_prefix, verbose=False):
if not keywords:
return {} # keyword-finding function failed to find keywords
refnames = keywords["refnames"].strip()
if refnames.startswith("$Format"):
if verbose:
print("keywords are unexpanded, not using")
return {} # unexpanded, so not in an unpacked git-archive tarball
refs = set([r.strip() for r in refnames.strip("()").split(",")])
# starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of
# just "foo-1.0". If we see a "tag: " prefix, prefer those.
TAG = "tag: "
tags = set([r[len(TAG):] for r in refs if r.startswith(TAG)])
if not tags:
# Either we're using git < 1.8.3, or there really are no tags. We use
# a heuristic: assume all version tags have a digit. The old git %d
# expansion behaves like git log --decorate=short and strips out the
# refs/heads/ and refs/tags/ prefixes that would let us distinguish
# between branches and tags. By ignoring refnames without digits, we
# filter out many common branch names like "release" and
# "stabilization", as well as "HEAD" and "master".
tags = set([r for r in refs if re.search(r'\d', r)])
if verbose:
print("discarding '%s', no digits" % ",".join(refs-tags))
if verbose:
print("likely tags: %s" % ",".join(sorted(tags)))
for ref in sorted(tags):
# sorting will prefer e.g. "2.0" over "2.0rc1"
if ref.startswith(tag_prefix):
r = ref[len(tag_prefix):]
if verbose:
print("picking %s" % r)
return { "version": r,
"full": keywords["full"].strip() }
# no suitable tags, so we use the full revision id
if verbose:
print("no suitable tags, using full revision id")
return { "version": keywords["full"].strip(),
"full": keywords["full"].strip() }


def git_versions_from_vcs(tag_prefix, root, verbose=False):
# this runs 'git' from the root of the source tree. This only gets called
# if the git-archive 'subst' keywords were *not* expanded, and
# _version.py hasn't already been rewritten with a short version string,
# meaning we're inside a checked out source tree.

if not os.path.exists(os.path.join(root, ".git")):
if verbose:
print("no .git in %s" % root)
return {}

GITS = ["git"]
if sys.platform == "win32":
GITS = ["git.cmd", "git.exe"]
stdout = run_command(GITS, ["describe", "--tags", "--dirty", "--always"],
cwd=root)
if stdout is None:
return {}
if not stdout.startswith(tag_prefix):
if verbose:
print("tag '%s' doesn't start with prefix '%s'" % (stdout, tag_prefix))
return {}
tag = stdout[len(tag_prefix):]
stdout = run_command(GITS, ["rev-parse", "HEAD"], cwd=root)
if stdout is None:
return {}
full = stdout.strip()
if tag.endswith("-dirty"):
full += "-dirty"
return {"version": tag, "full": full}


def get_versions(default={"version": "unknown", "full": ""}, verbose=False):
# I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have
# __file__, we can work backwards from there to the root. Some
# py2exe/bbfreeze/non-CPython implementations don't do __file__, in which
# case we can only use expanded keywords.

keywords = { "refnames": git_refnames, "full": git_full }
ver = git_versions_from_keywords(keywords, tag_prefix, verbose)
if ver:
return ver

try:
root = os.path.abspath(__file__)
# versionfile_source is the relative path from the top of the source
# tree (where the .git directory might live) to this file. Invert
# this to find the root from __file__.
for i in range(len(versionfile_source.split(os.sep))):
root = os.path.dirname(root)
except NameError:
return default

return (git_versions_from_vcs(tag_prefix, root, verbose)
or versions_from_parentdir(parentdir_prefix, root, verbose)
or default)
13 changes: 12 additions & 1 deletion setup.py
Expand Up @@ -5,8 +5,16 @@
print '(WARNING: importing distutils, not setuptools!)'
from distutils.core import setup

import versioneer
versioneer.VCS = 'git'
versioneer.versionfile_source = 'screed/_version.py'
versioneer.versionfile_build = 'screed/_version.py'
versioneer.tag_prefix = 'v' # i.e. v1.2.0
versioneer.parentdir_prefix = '.'
CMDCLASS = versioneer.get_cmdclass()

setup(name='screed',
version='0.7.1',
version=versioneer.get_version(),
description='A short read database',
author='Alex Nolley, C. Titus Brown',
author_email='ctb@msu.edu',
Expand All @@ -16,4 +24,7 @@
license='BSD',
test_suite='nose.collector',
extras_require={'tests': ['nose >= 1.0']},
cmdclass=versioneer.get_cmdclass()
)


0 comments on commit 90994a6

Please sign in to comment.