From commits-return-1124-archive-asf-public=cust-asf.ponee.io@yetus.apache.org Fri Aug 31 19:31:44 2018 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx-eu-01.ponee.io (Postfix) with SMTP id 89FE41807A5 for ; Fri, 31 Aug 2018 19:31:42 +0200 (CEST) Received: (qmail 27299 invoked by uid 500); 31 Aug 2018 17:31:41 -0000 Mailing-List: contact commits-help@yetus.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@yetus.apache.org Delivered-To: mailing list commits@yetus.apache.org Received: (qmail 27022 invoked by uid 99); 31 Aug 2018 17:31:41 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 31 Aug 2018 17:31:41 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 98DF6E0BBC; Fri, 31 Aug 2018 17:31:40 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: aw@apache.org To: commits@yetus.apache.org Date: Fri, 31 Aug 2018 17:31:48 -0000 Message-Id: <16fd7e0091264b47993596bf2d5cdcb7@git.apache.org> In-Reply-To: <73d85d29889f4f14bfeb6959c83380c4@git.apache.org> References: <73d85d29889f4f14bfeb6959c83380c4@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [09/37] yetus git commit: git hash 293c23e303c19f33ebd745679fa842486ec9d9b7 http://git-wip-us.apache.org/repos/asf/yetus/blob/4a356e40/documentation/0.8.0/audience-annotations-apidocs/overview-frame.html ---------------------------------------------------------------------- diff --git a/documentation/0.8.0/audience-annotations-apidocs/overview-frame.html b/documentation/0.8.0/audience-annotations-apidocs/overview-frame.html new file mode 100644 index 0000000..8e909c5 --- /dev/null +++ b/documentation/0.8.0/audience-annotations-apidocs/overview-frame.html @@ -0,0 +1,23 @@ + + + + + + +Overview List (Apache Yetus - Audience Annotations Component 0.8.0 API) + + + + + + + +

 

+ + http://git-wip-us.apache.org/repos/asf/yetus/blob/4a356e40/documentation/0.8.0/audience-annotations-apidocs/overview-summary.html ---------------------------------------------------------------------- diff --git a/documentation/0.8.0/audience-annotations-apidocs/overview-summary.html b/documentation/0.8.0/audience-annotations-apidocs/overview-summary.html new file mode 100644 index 0000000..76c2a0f --- /dev/null +++ b/documentation/0.8.0/audience-annotations-apidocs/overview-summary.html @@ -0,0 +1,144 @@ + + + + + + +Overview (Apache Yetus - Audience Annotations Component 0.8.0 API) + + + + + + + + +
+ + + + + + + +
+ + +
+

Apache Yetus - Audience Annotations Component 0.8.0 API

+
+
+ + + + + + + + + + + + + + + + +
Packages 
PackageDescription
org.apache.yetus.audience 
org.apache.yetus.audience.tools 
+
+ +
+ + + + + + + +
+ + +

Copyright © 2015–2018 The Apache Software Foundation. All rights reserved.

+ + http://git-wip-us.apache.org/repos/asf/yetus/blob/4a356e40/documentation/0.8.0/audience-annotations-apidocs/overview-tree.html ---------------------------------------------------------------------- diff --git a/documentation/0.8.0/audience-annotations-apidocs/overview-tree.html b/documentation/0.8.0/audience-annotations-apidocs/overview-tree.html new file mode 100644 index 0000000..4a98e93 --- /dev/null +++ b/documentation/0.8.0/audience-annotations-apidocs/overview-tree.html @@ -0,0 +1,153 @@ + + + + + + +Class Hierarchy (Apache Yetus - Audience Annotations Component 0.8.0 API) + + + + + + + + +
+ + + + + + + +
+ + +
+

Hierarchy For All Packages

+Package Hierarchies: + +
+
+

Class Hierarchy

+ +

Annotation Type Hierarchy

+ +
+ +
+ + + + + + + +
+ + +

Copyright © 2015–2018 The Apache Software Foundation. All rights reserved.

+ + http://git-wip-us.apache.org/repos/asf/yetus/blob/4a356e40/documentation/0.8.0/audience-annotations-apidocs/package-list ---------------------------------------------------------------------- diff --git a/documentation/0.8.0/audience-annotations-apidocs/package-list b/documentation/0.8.0/audience-annotations-apidocs/package-list new file mode 100644 index 0000000..79911a3 --- /dev/null +++ b/documentation/0.8.0/audience-annotations-apidocs/package-list @@ -0,0 +1,2 @@ +org.apache.yetus.audience +org.apache.yetus.audience.tools http://git-wip-us.apache.org/repos/asf/yetus/blob/4a356e40/documentation/0.8.0/audience-annotations-apidocs/script.js ---------------------------------------------------------------------- diff --git a/documentation/0.8.0/audience-annotations-apidocs/script.js b/documentation/0.8.0/audience-annotations-apidocs/script.js new file mode 100644 index 0000000..b346356 --- /dev/null +++ b/documentation/0.8.0/audience-annotations-apidocs/script.js @@ -0,0 +1,30 @@ +function show(type) +{ + count = 0; + for (var key in methods) { + var row = document.getElementById(key); + if ((methods[key] & type) != 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) +{ + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} http://git-wip-us.apache.org/repos/asf/yetus/blob/4a356e40/documentation/0.8.0/audience-annotations-apidocs/stylesheet.css ---------------------------------------------------------------------- diff --git a/documentation/0.8.0/audience-annotations-apidocs/stylesheet.css b/documentation/0.8.0/audience-annotations-apidocs/stylesheet.css new file mode 100644 index 0000000..98055b2 --- /dev/null +++ b/documentation/0.8.0/audience-annotations-apidocs/stylesheet.css @@ -0,0 +1,574 @@ +/* Javadoc style sheet */ +/* +Overall document style +*/ + +@import url('resources/fonts/dejavu.css'); + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a:hover, a:focus { + text-decoration:none; + color:#bb7a2a; +} +a:active { + text-decoration:none; + color:#4A6782; +} +a[name] { + color:#353833; +} +a[name]:hover { + text-decoration:none; + color:#353833; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +/* +Document title and Copyright styles +*/ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* +Navigation bar styles +*/ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.subNavList li{ + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* +Page header and footer styles +*/ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexHeader { + margin:10px; + position:relative; +} +.indexHeader span{ + margin-right:15px; +} +.indexHeader h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* +Heading styles +*/ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* +Page layout container styles +*/ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Sans Mono',monospace; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* +List styles +*/ +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* +Table styles +*/ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary { + width:100%; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited { + color:#FFFFFF; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; + +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th, +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{ + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colLast, th.colOne, .constantsSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + white-space:nowrap; + font-size:13px; +} +td.colLast, th.colLast { + font-size:13px; +} +td.colOne, th.colOne { + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.useSummary td.colFirst, .useSummary th.colFirst, +.overviewSummary td.colOne, .overviewSummary th.colOne, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colOne, .memberSummary th.colOne, +.typeSummary td.colFirst{ + width:25%; + vertical-align:top; +} +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor { + background-color:#FFFFFF; +} +.rowColor { + background-color:#EEEEEF; +} +/* +Content styles +*/ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} + +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} + +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} + +td.colLast div { + padding-top:0px; +} + + +td.colLast a { + padding-bottom:3px; +} +/* +Formatting effect styles +*/ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink, +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel, +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} + +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} + +div.contentContainer ul.blockList li.blockList h2{ + padding-bottom:0px; +} http://git-wip-us.apache.org/repos/asf/yetus/blob/4a356e40/documentation/0.8.0/index.html ---------------------------------------------------------------------- diff --git a/documentation/0.8.0/index.html b/documentation/0.8.0/index.html new file mode 100644 index 0000000..da0dcd4 --- /dev/null +++ b/documentation/0.8.0/index.html @@ -0,0 +1,182 @@ + + + + + + Apache Yetus + + + + + + + + + + + + + + + +
+ + +

Yetus Precommit

+ +

The Yetus Precommit Patch Tester allows projects to codify their patch acceptance criteria and then evaluate incoming contributions prior to review by a committer.

+ +
    +
  • Take a quick look at our glossary of terms to ensure you are familiar with the ASF and Maven jargon we’ll use as terminology specific to this project.
  • +
  • For an overview of Yetus’ philosophy on testing contributions and how evaluation is performed, see our overview.
  • +
  • To get started on your project, including an explanation of what we’ll expect in a runtime environment and what optional utilities we’ll leverage, read through the basic usage guide.
  • +
  • Customize how precommit interacts with your project by choosing amongst build systems, bug systems and test formats.
  • +
  • If your project has advanced requirements such as module relationships not expressed in Maven, special profiles, or a need on os-specific prerequisites not managed by Maven then you’ll need to use our advanced usage guide.
  • +
+ +

For a complete guide to the Precommit API, see the generated API documentation.

+ +

Yetus Release Doc Maker

+ +

The Release Documentation Maker allows projects to generate nicely formated Markdown Changelogs and Release Notes based upon JIRA. You can view that +documenation here.

+ +

Yetus Shelldocs

+ +

Shelldocs provides generation of html formatted api documentation based on comments on Bash functions. Currently supports documenting API status (public / private) as well as parameters and return values.

+ +

See the shelldocs cli help for more information on usage.

+
$ ./shelldocs/shelldocs.py --help
+Usage: shelldocs.py --skipprnorep --output OUTFILE --input INFILE [--input INFILE ...]
+
+Options:
+  -h, --help            show this help message and exit
+  -o OUTFILE, --output=OUTFILE
+                        file to create
+  -i INFILE, --input=INFILE
+                        file to read
+  --skipprnorep         Skip Private & Not Replaceable
+
+

You can mark a file to be ignored by shelldocs by adding SHELLDOC-IGNORE as a comment in its own line.

+ +

Yetus Audience Annotations

+ +

Audience Annotations allows you to use Java Annotations to denote which parts of your Java library is publicly consumable and which parts are reserved for a more restricted use. It also provides doclets and examples for generating javadocs limited by audience. +You can refer the user documentation here and the javadocs here.

+ +
+
+
+ +
+ + + http://git-wip-us.apache.org/repos/asf/yetus/blob/4a356e40/documentation/0.8.0/interface-classification/index.html ---------------------------------------------------------------------- diff --git a/documentation/0.8.0/interface-classification/index.html b/documentation/0.8.0/interface-classification/index.html new file mode 100644 index 0000000..4eddfde --- /dev/null +++ b/documentation/0.8.0/interface-classification/index.html @@ -0,0 +1,344 @@ + + + + + + Apache Yetus + + + + + + + + + + + + + + + +
+ + +

Apache Yetus Interface Taxonomy: Audience and Stability Classification

+ +

Motivation

+ +

The interface taxonomy classification provided by Apache Yetus annotations is for guidance to +developers and users of interfaces. The classification guides a developer to +declare the targeted audience or users of an interface and also its stability.

+ +
    +
  • Benefits to the user of an interface: Knows which interfaces to use or not use and their stability.

  • +
  • Benefits to the developer: to prevent accidental changes of interfaces and +hence accidental impact on users or other components or system. This is +particularly useful in large systems with many developers who may not all have +a shared state/history of the project.

  • +
+ +

Interface Classification

+ +

Yetus provides the following interface classification, derived from the +OpenSolaris taxonomy +and, to some extent, from taxonomy used inside Yahoo. +Interfaces have two main attributes: Audience and Stability

+ +

Audience

+ +

Audience denotes the potential consumers of the interface. While many interfaces +are internal/private to the implementation, others are public/external interfaces +and are meant for wider consumption by applications and/or clients. For example, +POSIX definitions in libc are external, while large parts of the kernel are internal or private interfaces. +Also, some interfaces are targeted towards other specific subsystems.

+ +

Identifying the audience of an interface helps define the impact of breaking +it. For instance, it might be okay to break the compatibility of an interface +whose audience is a small number of specific subsystems. On the other hand, it +is probably not okay to break a protocol interfaces that millions of Internet +users depend on.

+ +

Yetus uses the following kinds of audience in order of increasing/wider visibility:

+ +

Private

+ +

The interface is for internal use within a project(such as Apache Hadoop) +and should not be used by applications or by other projects. It is subject to +change at anytime without notice. Most interfaces of a project are Private (also +referred to as project-private).

+ +

Limited-Private

+ +

The interface is used by a specified set of projects or systems (typically +closely related projects). Other projects or systems should not use the +interface. Changes to the interface will be communicated/ negotiated with the +specified projects. For example, in the Apache Hadoop project, some interfaces are +LimitedPrivate{HDFS, MapReduce} in that they are private to the HDFS and +MapReduce subprojects.

+ +

Public

+ +

The interface is for general use by any application.

+ +

Stability

+ +

Stability denotes how stable an interface is, as in when incompatible changes to +the interface are allowed. Yetus provides the following levels of stability.

+ +

Stable

+ +

Can evolve while retaining compatibility for minor release boundaries; in other +words, incompatible changes to APIs marked Stable are generally only allowed +at major releases (i.e. at m.0).

+ +

Evolving

+ +

Evolving, but incompatible changes are allowed at minor release (i.e. m .x)

+ +

Unstable

+ +

Incompatible changes to Unstable APIs are allowed any time. This usually makes +sense for only private interfaces.

+ +

However one may call this out for a supposedly public interface to highlight +that it should not be used as an interface; for public interfaces, labeling it +as Not-an-interface is probably more appropriate than Unstable.

+ +

Examples of publicly visible interfaces that are unstable +(i.e. not-an-interface): GUI, CLIs whose output format will change

+ +

Deprecated

+ +

APIs that could potentially be removed in the future and should not be used.

+ +

How are the Classifications Recorded

+ +

How should the classification be recorded for the annotated APIs?

+ +
    +
  • Each interface or class will have the audience and stability recorded using +annotations in org.apache.yetus.classification package.

  • +
  • The javadoc generated by the maven target javadoc:javadoc lists only the public API.

  • +
  • One can derive the audience of java classes and java interfaces by the +audience of the package in which they are contained. Hence it is useful to +declare the audience of each java package as public or private (along with the +private audience variations).

  • +
+ +

FAQ

+ +
    +
  • Why aren’t the java scopes (private, package private and public) good enough?

    + +
      +
    • Java’s scoping is not very complete. One is often forced to make a class +public in order for other internal components to use it. It does not have +friends or sub-package-private like C++.
    • +
  • +
  • But I can easily access a private implementation interface if it is Java public. +Where is the protection and control?

    + +
      +
    • The purpose of this is not providing absolute access control. Its purpose +is to communicate to users and developers. One can access private +implementation functions in libc; however if they change the internal +implementation details, your application will break and you will have +little sympathy from the folks who are supplying libc. If you use a +non-public interface you understand the risks.
    • +
  • +
  • Why bother declaring the stability of a private interface? +Aren’t private interfaces always unstable?

    + +
      +
    • Private interfaces are not always unstable. In the cases where they are +stable they capture internal properties of the system and can communicate +these properties to its internal users and to developers of the interface. + +
        +
      • e.g. In HDFS, NN-DN protocol is private but stable and can help +implement rolling upgrades. It communicates that this interface should +not be changed in incompatible ways even though it is private.
      • +
      • e.g. In HDFS, FSImage stability can help provide more flexible roll backs.
      • +
    • +
  • +
  • What is the harm in applications using a private interface that is stable? How +is it different than a public stable interface?

    + +
      +
    • While a private interface marked as stable is targeted to change only at +major releases, it may break at other times if the providers of that +interface are willing to changes the internal users of that +interface. Further, a public stable interface is less likely to break even +at major releases (even though it is allowed to break compatibility) +because the impact of the change is larger. If you use a private interface +(regardless of its stability) you run the risk of incompatibility.
    • +
  • +
  • Why bother with Limited-private? Isn’t it giving special treatment to some projects? +That is not fair.

    + +
      +
    • First, most interfaces should be public or private; actually let us state +it even stronger: make it private unless you really want to expose it to +public for general use.
    • +
    • Limited-private is for interfaces that are not intended for general +use. They are exposed to related projects that need special hooks. Such a +classification has a cost to both the supplier and consumer of the limited +interface. Both will have to work together if ever there is a need to +break the interface in the future; for example the supplier and the +consumers will have to work together to get coordinated releases of their +respective projects. This should not be taken lightly - if you can get +away with private then do so; if the interface is really for general use +for all applications then you should consider making it public. But remember +that making an interface public has huge responsibility. Sometimes +Limited-private is just right.
    • +
    • A good example of a limited-private interface is BlockLocations in the Apache +Hadoop Project, This is fairly low-level interface that they are willing to +expose to MR and perhaps HBase. They are likely to change it down the road +and at that time they will have to get a coordinated effort with the MR +team to release matching releases. While MR and HDFS are always released +in sync today, they may change down the road.
    • +
    • If you have a limited-private interface with many projects listed then you +are fooling yourself. It is practically public.
    • +
    • It might be worth declaring a special audience classification called +{YourProjectName}-Private for your closely related projects.
    • +
  • +
  • Can’t a private interface be treated as project-private also? For example what is +the harm in projects in the Apache Hadoop extended ecosystem, having access to +private classes?

    + +
      +
    • Do we want MR accessing class files that are implementation details inside +HDFS? There used to be many such layer violations in the Apache Hadoop +project that they have been cleaning up over the last few years. It is highly +undesirable for such layer violations to creep back in by no separation +between the major components like HDFS and MR.
    • +
  • +
  • Aren’t all public interfaces stable?

    + +
      +
    • One may mark a public interface as evolving in its early days. Here one is +promising to make an effort to make compatible changes but may need to +break it at minor releases.
    • +
    • One example of a public interface that is unstable is where one is +providing an implementation of a standards-body based interface that is +still under development. For example, many companies, in an attempt to be +first to market, have provided implementations of a new NFS protocol even +when the protocol was not fully completed by IETF. The implementor cannot +evolve the interface in a fashion that causes least disruption because +the stability is controlled by the standards body. Hence it is appropriate +to label the interface as unstable.
    • +
  • +
+ +
+
+
+ +
+ + + http://git-wip-us.apache.org/repos/asf/yetus/blob/4a356e40/documentation/0.8.0/precommit-admin/index.html ---------------------------------------------------------------------- diff --git a/documentation/0.8.0/precommit-admin/index.html b/documentation/0.8.0/precommit-admin/index.html new file mode 100644 index 0000000..46f1052 --- /dev/null +++ b/documentation/0.8.0/precommit-admin/index.html @@ -0,0 +1,208 @@ + + + + + + Apache Yetus + + + + + + + + + + + + + + + +
+ + +

Overview

+ +

The jenkins-admin script is an automated way to submit JIRA issues to the Apache Yetus precommit testing framework. It works by:

+ +
    +
  • Grab the XML output of a JIRA filter that contains all the issues that should be tested by the system. In general, the filter should comprise issues from relevant JIRA projects that are currently in Patch Available state.
  • +
  • Process the XML into a list of <project-issue>, <attachment id> pairs, where attachment id is the id for the newest attachment on the issue. Pulling the newest attachment implies that if multiple attachments are uploaded to an issue, the last one is the one that will be processed and other attachments will be ignored.
  • +
  • Grab the single build artifact that this job keeps, patch_tested.txt. This file contains the list of <project-issue>, <attachment id> pairs that have already been submitted for testing.
  • +
  • For each pair from the processed XML, see if the pair is in patch_tested.txt. If not, start a new project build and append the pair to the file.
  • +
  • When this admin job completes, archive the latest patch_tested.txt file.
  • +
+ +

All communication to Jenkins is currently done with the Remote Access API using tokens where necessary (see below). JIRA communication is currently unauthenticated.

+ +

The JIRA filter is a required value provided via the --jira-filter parameter. It should be the full URL as provided by the JIRA UI.

+ +

In order to prevent accidents, the --live parameter is required when jenkins-admin is used for production purposes. Without this flag, jobs are not launched but the patch_tested.txt file is created/updated.

+ +

By default, jenkins-admin expects that the JOB_NAME environment variable will be set by Jenkins. If it is not or it needs to be overridden, that can be done with the --jenkins-jobname parameter.

+ +

Additionally, the URL of the Jenkins server is expected to be in the JENKINS_URL environment variable, also usually set by Jenkins. This value may be overridden with the --jenkins-url option.

+ +

The very first run of the job should be done with the --initialize parameter to create the first patch_tested.txt file. Otherwise, the job will fail because a previous version of it cannot be downloaded from previous runs.

+ +

Project-Specifc Builds

+ +

New builds are started via buildWithParameters call. Three parameters are added to the URL:

+
* token = Jenkins security token (see below)
+* ISSUE\_NUM = JIRA issue number
+* ATTACHMENT\_ID = JIRA attachment id
+
+

By default, the Jenkins job name is expected to be PreCommit-{project}, where the project name matches the JIRA project name. Using the JIRA issue YETUS-1 with an attachment number of 2345 would result in the following URL:

+ +

{JENKINS_URL}/job/PreCommit-YETUS/buildWithParameters?token=YETUS-token&ISSUE_NUM=1&ATTACHMENT_ID=2345

+ +

The {JENKINS_URL} can be overridden on a per project basis using the --jenkins-url-override option. This parameter allows for one job on one Jenkins server to direct different projects to different Jenkins servers. For example:

+ +

jenkins-admin –jenkins-url-override=PROJ1=https://example.com/1 –jenkins-url-override=PROJ2=https://example.com/1

+ +

would send all PROJ1 Jenkins jobs to the first URL and all PROJ2 jobs to the second URL. The --jenkins-url-override option may be listed as many times as necessary.

+ +

The job name can be overridden via the --jenkins-project-template option. For example, using --jenkins-project-template='{project}-Build'would change the above URL to be:

+ +

…/job/PreCommit-YETUS-Build/buildwithParameters?…

+ +

Jenkins Job Tokens

+ +

Currently, jenkins-admin supports the usage of Jenkins tokens for authentication via the --jenkins-token option. This option provides two ways to do tokens

+ +
    +
  • Flat tokens
  • +
  • Template tokens
  • +
+ +

Flat tokens are a simple string. For example, --jenkins-tokens=yetus would require the yetus string to be listed as the token in the Jenkins job configuration that is being requested.

+ +

On the other hand, template tokens perform some simple string substitution before being used. This exchange includes:

+ +
    +
  • {project} for the JIRA project name
  • +
  • {issue} for the JIRA issue number
  • +
  • {attachment} for the JIRA issue attachment id
  • +
+ +

For example, if JIRA issue YETUS-1 has an attachment of 2345, then {project} becomes YETUS, {issue} becomes 1, and {attachment} becomes 2345.

+ +

By default, the token is set to {project}-token. The token then becomes YETUS-token using the above values.

+ +
+
+
+ +
+ + +