You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@yetus.apache.org by bu...@apache.org on 2016/04/02 05:58:11 UTC

[1/3] yetus git commit: YETUS-303. better sorting options for releasedocmaker

Repository: yetus
Updated Branches:
  refs/heads/master 7355288fe -> 26aef2689


YETUS-303. better sorting options for releasedocmaker

Signed-off-by: Sean Busbey <bu...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/yetus/repo
Commit: http://git-wip-us.apache.org/repos/asf/yetus/commit/e58875dd
Tree: http://git-wip-us.apache.org/repos/asf/yetus/tree/e58875dd
Diff: http://git-wip-us.apache.org/repos/asf/yetus/diff/e58875dd

Branch: refs/heads/master
Commit: e58875ddcd549ef22d4bbca393aaabee2b78ee85
Parents: 7355288
Author: Allen Wittenauer <aw...@apache.org>
Authored: Fri Mar 18 12:36:48 2016 -0700
Committer: Sean Busbey <bu...@apache.org>
Committed: Fri Apr 1 22:14:13 2016 -0500

----------------------------------------------------------------------
 .../in-progress/releasedocmaker.md              | 38 ++++++++++
 release-doc-maker/releasedocmaker.py            | 75 ++++++++++++++------
 2 files changed, 91 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/yetus/blob/e58875dd/asf-site-src/source/documentation/in-progress/releasedocmaker.md
----------------------------------------------------------------------
diff --git a/asf-site-src/source/documentation/in-progress/releasedocmaker.md b/asf-site-src/source/documentation/in-progress/releasedocmaker.md
index 2a5f0cd..71d6619 100644
--- a/asf-site-src/source/documentation/in-progress/releasedocmaker.md
+++ b/asf-site-src/source/documentation/in-progress/releasedocmaker.md
@@ -114,6 +114,44 @@ $ releasedocmaker.py --project HBASE --version 1.0.0 --usetoday
 
 After using this option and release, don't forget to change JIRA's release date to match!
 
+# Sorted Output
+
+Different projects may find one type of sort better than another, depending upon their needs.  releasedocmaker supports two types of sorts and each provides two different options in the direction for that sort.
+
+## Resolution Date-base Sort
+
+By default, releasedocmaker will sort the output based upon the resolution date of the issue starting with older resolutions.  This is the same as giving these options:
+
+```bash
+$ releasedocmaker --sorttype=releasedate --sortorder=older
+```
+
+The order can be reversed so that newer issues appear on top by providing the 'newer' flag:
+
+```bash
+$ releasedocmaker --sorttype=releasedate --sortorder=newer
+```
+
+In the case of multiple projects given on the command line, the projects will be interspersed.
+
+## Issue Number-based Sort
+
+An alternative to the date-based sort is to sort based upon the issue id.  This may be accomplished via:
+
+```bash
+$ releasedocmaker --sorttype=issueid --sortorder=asc
+```
+
+This will now sort by the issue id, listing them in lowest to highest (or ascending) order.
+
+The order may be reversed to list them in highest to lowest (or descending) order by providing the appropriate flag:
+
+```bash
+$ releasedocmaker --sorttype=issueid --sortorder=dec
+```
+
+In the case of multiple projects given on the command line, the projects will be grouped and then sorted by issue id.
+
 # Lint Mode
 
 In order to ensure proper formatting while using mvn site, releasedocmaker puts in periods (.) for fields that are empty or unassigned.  This can be unsightly and not proper for any given project.  There are also other things, such as missing release notes for incompatible changes, that are less than desirable.

http://git-wip-us.apache.org/repos/asf/yetus/blob/e58875dd/release-doc-maker/releasedocmaker.py
----------------------------------------------------------------------
diff --git a/release-doc-maker/releasedocmaker.py b/release-doc-maker/releasedocmaker.py
index 07a1124..5f28a73 100755
--- a/release-doc-maker/releasedocmaker.py
+++ b/release-doc-maker/releasedocmaker.py
@@ -36,10 +36,16 @@ try:
 except NameError:
     from sets import Set as set
 
+import dateutil.parser
+
+
+
 RELEASE_VERSION = {}
 NAME_PATTERN = re.compile(r' \([0-9]+\)')
 RELNOTE_PATTERN = re.compile('^\<\!\-\- ([a-z]+) \-\-\>')
 JIRA_BASE_URL = "https://issues.apache.org/jira"
+SORTTYPE = 'resolutiondate'
+SORTORDER = 'older'
 
 ASF_LICENSE = '''
 <!---
@@ -98,13 +104,14 @@ def textsanitize(_str):
 # if release notes have a special marker,
 # we'll treat them as already in markdown format
 def processrelnote(_str):
-  fmt = RELNOTE_PATTERN.match(_str)
-  if fmt is None:
-      return textsanitize(_str)
-  else:
-      return {
-        'markdown' : markdownsanitize(_str),
-      }.get(fmt.group(1),textsanitize(_str))
+    fmt = RELNOTE_PATTERN.match(_str)
+    if fmt is None:
+        return textsanitize(_str)
+    else:
+        return {
+            'markdown': markdownsanitize(_str),
+        }.get(
+            fmt.group(1), textsanitize(_str))
 
 def mstr(obj):
     if obj is None:
@@ -260,17 +267,32 @@ class Jira(object):
         return mstr(ret)
 
     def __cmp__(self, other):
-        selfsplit = self.get_id().split('-')
-        othersplit = other.get_id().split('-')
-        result = cmp(selfsplit[0], othersplit[0])
-        if result != 0:
-            return result
-        else:
-            if selfsplit[1] < othersplit[1]:
-                return True
-            elif selfsplit[1] > othersplit[1]:
-                return False
-        return False
+        result = 0
+
+        if SORTTYPE == 'issueid':
+            # compare by issue name-number
+            selfsplit = self.get_id().split('-')
+            othersplit = other.get_id().split('-')
+            result = cmp(selfsplit[0], othersplit[0])
+            if result == 0:
+                result = cmp(int(selfsplit[1]), int(othersplit[1]))
+                if result != 0:
+                    if SORTORDER == 'dec':
+                        if result == 1:
+                            result = -1
+                        else:
+                            result = 1
+        elif SORTTYPE == 'resolutiondate':
+            dts = dateutil.parser.parse(self.fields['resolutiondate'])
+            dto = dateutil.parser.parse(other.fields['resolutiondate'])
+            result = cmp(dts, dto)
+            if result != 0:
+                if SORTORDER == 'newer':
+                    if result == 1:
+                        result = -1
+                    else:
+                        result = 1
+        return result
 
     def get_incompatible_change(self):
         if self.incompat is None:
@@ -398,21 +420,21 @@ class Outputs(object):
         if params is None:
             params = {}
         self.params = params
-        self.base = open(base_file_name%params, 'w')
+        self.base = open(base_file_name % params, 'w')
         self.others = {}
         for key in keys:
             both = dict(params)
             both['key'] = key
-            self.others[key] = open(file_name_pattern%both, 'w')
+            self.others[key] = open(file_name_pattern % both, 'w')
 
     def write_all(self, pattern):
         both = dict(self.params)
         both['key'] = ''
-        self.base.write(pattern%both)
+        self.base.write(pattern % both)
         for key in self.others.keys():
             both = dict(self.params)
             both['key'] = key
-            self.others[key].write(pattern%both)
+            self.others[key].write(pattern % both)
 
     def write_key_raw(self, key, _str):
         self.base.write(_str)
@@ -501,6 +523,10 @@ def parse_args():
                       help="projects in JIRA to include in releasenotes", metavar="PROJECT")
     parser.add_option("-r", "--range", dest="range", action="store_true",
                       default=False, help="Given versions are a range")
+    parser.add_option("--sortorder", dest="sortorder", type="string", metavar="TYPE",
+                      default=SORTORDER, help="Sorting order for sort type (default: %s)"%SORTORDER)
+    parser.add_option("--sorttype", dest="sorttype", type="string", metavar="TYPE",
+                      default=SORTTYPE, help="Sorting type for issues (default: %s)"%SORTTYPE)
     parser.add_option("-t", "--projecttitle", dest="title", type="string",
                       help="Title to use for the project (default is Apache PROJECT)")
     parser.add_option("-u", "--usetoday", dest="usetoday", action="store_true",
@@ -570,6 +596,11 @@ def main():
         versions = [Version(v) for v in options.versions]
     versions.sort()
 
+    global SORTTYPE
+    SORTTYPE = options.sorttype
+    global SORTORDER
+    SORTORDER = options.sortorder
+
     if options.title is None:
         title = projects[0]
     else:


[2/3] yetus git commit: YETUS-336. javadoc plugin giving conflicting answers on pass/fail

Posted by bu...@apache.org.
YETUS-336. javadoc plugin giving conflicting answers on pass/fail

Signed-off-by: Sean Busbey <bu...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/yetus/repo
Commit: http://git-wip-us.apache.org/repos/asf/yetus/commit/56cc463e
Tree: http://git-wip-us.apache.org/repos/asf/yetus/tree/56cc463e
Diff: http://git-wip-us.apache.org/repos/asf/yetus/diff/56cc463e

Branch: refs/heads/master
Commit: 56cc463e9708718e4e5b9526268bedc832b29649
Parents: e58875d
Author: Allen Wittenauer <aw...@apache.org>
Authored: Mon Mar 28 12:56:54 2016 -0700
Committer: Sean Busbey <bu...@apache.org>
Committed: Fri Apr 1 22:33:43 2016 -0500

----------------------------------------------------------------------
 precommit/test-patch.sh | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/yetus/blob/56cc463e/precommit/test-patch.sh
----------------------------------------------------------------------
diff --git a/precommit/test-patch.sh b/precommit/test-patch.sh
index 53ef2f2..ee96505 100755
--- a/precommit/test-patch.sh
+++ b/precommit/test-patch.sh
@@ -2502,14 +2502,14 @@ function generic_postlog_compare
 
     if [[ ${addpatch} -gt 0 ]]; then
       ((result = result + 1))
-      add_vote_table -1 "${testtype}" "${fn}${statusjdk} ${statstring}"
-      add_footer_table "${testtype}" "${fn}: @@BASE@@/diff-${origlog}-${testtype}-${fn}.txt"
+      module_status "${i}" -1 "diff-${origlog}-${testtype}-${fn}.txt" "${fn}${statusjdk} ${statstring}"
     elif [[ ${fixedpatch} -gt 0 ]]; then
-      add_vote_table +1 "${testtype}" "${fn}${statusjdk} ${statstring}"
+      module_status "${i}" +1 "${MODULE_STATUS_LOG[${i}]}" "${fn}${statusjdk} ${statstring}"
       summarize=false
     fi
     ((i=i+1))
   done
+
   modules_messages patch "${testtype}" "${summarize}"
   if [[ ${result} -gt 0 ]]; then
     return 1


[3/3] yetus git commit: YETUS-361. Use Google's pylintrc file.

Posted by bu...@apache.org.
YETUS-361. Use Google's pylintrc file.

Signed-off-by: Sean Busbey <bu...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/yetus/repo
Commit: http://git-wip-us.apache.org/repos/asf/yetus/commit/26aef268
Tree: http://git-wip-us.apache.org/repos/asf/yetus/tree/26aef268
Diff: http://git-wip-us.apache.org/repos/asf/yetus/diff/26aef268

Branch: refs/heads/master
Commit: 26aef2689018894dc5b2289cb5c064497ef921d8
Parents: 56cc463
Author: Andrew Wang <an...@cloudera.com>
Authored: Wed Mar 30 12:50:54 2016 -0700
Committer: Sean Busbey <bu...@apache.org>
Committed: Fri Apr 1 22:48:26 2016 -0500

----------------------------------------------------------------------
 .pylintrc | 301 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 301 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/yetus/blob/26aef268/.pylintrc
----------------------------------------------------------------------
diff --git a/.pylintrc b/.pylintrc
index ba7ab9a..b4cc79a 100644
--- a/.pylintrc
+++ b/.pylintrc
@@ -1,4 +1,305 @@
+[MASTER]
+
+# Specify a configuration file.
+#rcfile=
+
+# Python code to execute, usually for sys.path manipulation such as
+# pygtk.require().
+#init-hook=
+
+# Profiled execution.
+#profile=no
+
+# Add files or directories to the blacklist. They should be base names, not
+# paths.
+ignore=CVS
+
+# Pickle collected data for later comparisons.
+persistent=yes
+
+# List of plugins (as comma separated values of python modules names) to load,
+# usually to register additional checkers.
+load-plugins=
+
+
+[MESSAGES CONTROL]
+
+# Enable the message, report, category or checker with the given id(s). You can
+# either give multiple identifier separated by comma (,) or put this option
+# multiple time.
+#enable=
+
+# Disable the message, report, category or checker with the given id(s). You
+# can either give multiple identifier separated by comma (,) or put this option
+# multiple time (only on the command line, not in the configuration file where
+# it should appear only once).
+# CHANGED:
+# C0103: Invalid name ""
+# C0111: Missing docstring
+# C0302: Too many lines in module (N)
+# I0010: Unable to consider inline option ''
+# I0011: Locally disabling WNNNN
+#
+# R0801: Similar lines in N files
+# R0901: Too many ancestors (8/7)
+# R0902: Too many instance attributes (N/7)
+# R0903: Too few public methods (N/2)
+# R0904: Too many public methods (N/20)
+# R0911: Too many return statements (N/6)
+# R0912: Too many branches (N/12)
+# R0913: Too many arguments (N/5)
+# R0914: Too many local variables (N/15)
+# R0915: Too many statements (N/50)
+# R0921: Abstract class not referenced
+# R0922: Abstract class is only referenced 1 times
+# W0122: Use of the exec statement
+# W0141: Used builtin function ''
+# W0142: Used * or ** magic
+# W0402: Uses of a deprecated module 'string'
+# W0404: 41: Reimport 'XX' (imported line NN)
+# W0511: TODO
+# W0603: Using the global statement
+# W0703: Catch "Exception"
+# W1201: Specify string format arguments as logging function parameters
+#
+# These should get enabled, but the codebase has too many violations currently.
+# bad-continuation
+# anomalous-backslash-in-string
+# bad-context-manager
+# bad-indentation
+# bad-str-strip-call
+# bad-whitespace
+# cell-var-from-loop
+# deprecated-lambda
+# eval-used
+# function-redefined
+# import-error
+# locally-enabled
+# missing-final-newline
+# no-init
+# no-name-in-module
+# no-self-use
+# not-callable
+# old-style-class
+# protected-access
+# superfluous-parens
+# super-on-old-class
+# too-many-function-args
+# trailing-whitespace
+# unnecessary-semicolon
+# unpacking-non-sequence
+# unused-import
+# useless-else-on-loop
+disable=C0103,C0111,C0302,I0010,I0011,R0801,R0901,R0902,R0903,R0904,R0911,R0912,R0913,R0914,R0915,R0921,R0922,W0122,W0141,W0142,W0402,W0404,W0511,W0603,W0703,W1201,bad-continuation,anomalous-backslash-in-string,bad-context-manager,bad-indentation,bad-str-strip-call,bad-whitespace,cell-var-from-loop,deprecated-lambda,eval-used,function-redefined,import-error,locally-enabled,missing-final-newline,no-init,no-name-in-module,no-self-use,not-callable,old-style-class,protected-access,superfluous-parens,super-on-old-class,too-many-function-args,trailing-whitespace,unnecessary-semicolon,unpacking-non-sequence,unused-import,useless-else-on-loop
+
+
+[REPORTS]
+
+# Set the output format. Available formats are text, parseable, colorized, msvs
+# (visual studio) and html
+output-format=text
+
+# Put messages in a separate file for each module / package specified on the
+# command line instead of printing them on stdout. Reports (if any) will be
+# written in a file name "pylint_global.[txt|html]".
+files-output=no
+
+# Tells whether to display a full report or only the messages
+# CHANGED:
+reports=no
+
+# Python expression which should return a note less than 10 (10 is the highest
+# note). You have access to the variables errors warning, statement which
+# respectively contain the number of errors / warnings messages and the total
+# number of statements analyzed. This is used by the global evaluation report
+# (RP0004).
+evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
+
+# Add a comment according to your evaluation note. This is used by the global
+# evaluation report (RP0004).
+#comment=no
+
+
+[VARIABLES]
+
+# Tells whether we should check for unused import in __init__ files.
+init-import=no
+
+# A regular expression matching the beginning of the name of dummy variables
+# (i.e. not used).
+dummy-variables-rgx=_|dummy
+
+# List of additional names supposed to be defined in builtins. Remember that
+# you should avoid to define new builtins when possible.
+additional-builtins=
+
+
+[TYPECHECK]
+
+# Tells whether missing members accessed in mixin class should be ignored. A
+# mixin class is detected if its name ends with "mixin" (case insensitive).
+ignore-mixin-members=yes
+
+# List of classes names for which member attributes should not be checked
+# (useful for classes with attributes dynamically set).
+ignored-classes=SQLObject,twisted.internet.reactor,hashlib,google.appengine.api.memcache
+
+# When zope mode is activated, add a predefined set of Zope acquired attributes
+# to generated-members.
+#zope=no
+
+# List of members which are set dynamically and missed by pylint inference
+# system, and so shouldn't trigger E0201 when accessed. Python regular
+# expressions are accepted.
+generated-members=REQUEST,acl_users,aq_parent,multiprocessing.managers.SyncManager
+
+
+[MISCELLANEOUS]
+
+# List of note tags to take in consideration, separated by a comma.
+notes=FIXME,XXX,TODO
+
+
+[SIMILARITIES]
+
+# Minimum lines number of a similarity.
+min-similarity-lines=4
+
+# Ignore comments when computing similarities.
+ignore-comments=yes
+
+# Ignore docstrings when computing similarities.
+ignore-docstrings=yes
+
+
 [FORMAT]
 
 # Maximum number of characters on a single line.
 max-line-length=100
+
+# Maximum number of lines in a module
+max-module-lines=1000
+
+# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
+# tab).
+# CHANGED:
+indent-string='  '
+
+
+[BASIC]
+
+# Required attributes for module, separated by a comma
+#required-attributes=
+
+# List of builtins function names that should not be used, separated by a comma
+bad-functions=map,filter,apply,input
+
+# Regular expression which should only match correct module names
+module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
+
+# Regular expression which should only match correct module level names
+const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$
+
+# Regular expression which should only match correct class names
+class-rgx=[A-Z_][a-zA-Z0-9]+$
+
+# Regular expression which should only match correct function names
+function-rgx=[a-z_][a-z0-9_]{2,30}$
+
+# Regular expression which should only match correct method names
+method-rgx=[a-z_][a-z0-9_]{2,30}$
+
+# Regular expression which should only match correct instance attribute names
+attr-rgx=[a-z_][a-z0-9_]{2,30}$
+
+# Regular expression which should only match correct argument names
+argument-rgx=[a-z_][a-z0-9_]{2,30}$
+
+# Regular expression which should only match correct variable names
+variable-rgx=[a-z_][a-z0-9_]{2,30}$
+
+# Regular expression which should only match correct list comprehension /
+# generator expression variable names
+inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
+
+# Good variable names which should always be accepted, separated by a comma
+good-names=i,j,k,ex,Run,_
+
+# Bad variable names which should always be refused, separated by a comma
+bad-names=foo,bar,baz,toto,tutu,tata
+
+# Regular expression which should only match functions or classes name which do
+# not require a docstring
+no-docstring-rgx=__.*__
+
+
+[DESIGN]
+
+# Maximum number of arguments for function / method
+max-args=5
+
+# Argument names that match this expression will be ignored. Default to name
+# with leading underscore
+ignored-argument-names=_.*
+
+# Maximum number of locals for function / method body
+max-locals=15
+
+# Maximum number of return / yield for function / method body
+max-returns=6
+
+# Maximum number of branch for function / method body
+max-branchs=12
+
+# Maximum number of statements in function / method body
+max-statements=50
+
+# Maximum number of parents for a class (see R0901).
+max-parents=7
+
+# Maximum number of attributes for a class (see R0902).
+max-attributes=7
+
+# Minimum number of public methods for a class (see R0903).
+min-public-methods=2
+
+# Maximum number of public methods for a class (see R0904).
+max-public-methods=20
+
+
+[CLASSES]
+
+# List of interface methods to ignore, separated by a comma. This is used for
+# instance to not check methods defines in Zope's Interface base class.
+#ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by
+
+# List of method names used to declare (i.e. assign) instance attributes.
+defining-attr-methods=__init__,__new__,setUp
+
+# List of valid names for the first argument in a class method.
+valid-classmethod-first-arg=cls
+
+
+[IMPORTS]
+
+# Deprecated modules which should not be used, separated by a comma
+deprecated-modules=regsub,string,TERMIOS,Bastion,rexec
+
+# Create a graph of every (i.e. internal and external) dependencies in the
+# given file (report RP0402 must not be disabled)
+import-graph=
+
+# Create a graph of external dependencies in the given file (report RP0402 must
+# not be disabled)
+ext-import-graph=
+
+# Create a graph of internal dependencies in the given file (report RP0402 must
+# not be disabled)
+int-import-graph=
+
+
+[EXCEPTIONS]
+
+# Exceptions that will emit a warning when being caught. Defaults to
+# "Exception"
+overgeneral-exceptions=Exception