From f4e3226c4fa8023d4337efe9490132e730988a99 Mon Sep 17 00:00:00 2001 From: Jimmy Jones Date: Sat, 6 Feb 2016 20:09:05 +0000 Subject: [PATCH 01/29] Allow exists filter for unindexed fields, but not meta fields --- .../components/field_chooser/lib/detail_views/string.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/kibana/public/discover/components/field_chooser/lib/detail_views/string.html b/src/plugins/kibana/public/discover/components/field_chooser/lib/detail_views/string.html index d90c7cd1c4b7..6109d5114643 100644 --- a/src/plugins/kibana/public/discover/components/field_chooser/lib/detail_views/string.html +++ b/src/plugins/kibana/public/discover/components/field_chooser/lib/detail_views/string.html @@ -3,8 +3,8 @@
Quick Count ( - {{::field.details.exists}} - {{::field.details.exists}} + {{::field.details.exists}} + {{::field.details.exists}} /{{::field.details.total}} records ) From 82146c222b260fcee42a9737930bf9ac0c780bef Mon Sep 17 00:00:00 2001 From: Jimmy Jones Date: Tue, 9 Feb 2016 19:52:31 +0000 Subject: [PATCH 02/29] Updates as suggested by @spalger --- .../field_chooser/lib/detail_views/string.html | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/plugins/kibana/public/discover/components/field_chooser/lib/detail_views/string.html b/src/plugins/kibana/public/discover/components/field_chooser/lib/detail_views/string.html index 6109d5114643..719d1c6ef62f 100644 --- a/src/plugins/kibana/public/discover/components/field_chooser/lib/detail_views/string.html +++ b/src/plugins/kibana/public/discover/components/field_chooser/lib/detail_views/string.html @@ -3,8 +3,15 @@
Quick Count ( - {{::field.details.exists}} - {{::field.details.exists}} + + {{::field.details.exists}} + + + {{::field.details.exists}} + /{{::field.details.total}} records ) From 1e0f2174e199fcf13675d78da76f6e42ede64180 Mon Sep 17 00:00:00 2001 From: michaelcheng429 Date: Wed, 20 Jan 2016 19:28:23 -0600 Subject: [PATCH 03/29] fix histogram extended bounds persisting after deselection --- .../public/agg_types/__tests__/buckets/_histogram.js | 12 ++++++++++++ src/ui/public/agg_types/buckets/histogram.js | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/ui/public/agg_types/__tests__/buckets/_histogram.js b/src/ui/public/agg_types/__tests__/buckets/_histogram.js index 0aa6a3122bd5..ea14171d32e6 100644 --- a/src/ui/public/agg_types/__tests__/buckets/_histogram.js +++ b/src/ui/public/agg_types/__tests__/buckets/_histogram.js @@ -82,6 +82,7 @@ describe('Histogram Agg', function () { describe('extended_bounds', function () { it('writes when only eb.min is set', function () { var output = paramWriter.write({ + min_doc_count: true, extended_bounds: { min: 0 } }); expect(output.params.extended_bounds).to.have.property('min', 0); @@ -90,6 +91,7 @@ describe('Histogram Agg', function () { it('writes when only eb.max is set', function () { var output = paramWriter.write({ + min_doc_count: true, extended_bounds: { max: 0 } }); expect(output.params.extended_bounds).to.have.property('min', undefined); @@ -98,6 +100,7 @@ describe('Histogram Agg', function () { it('writes when both eb.min and eb.max are set', function () { var output = paramWriter.write({ + min_doc_count: true, extended_bounds: { min: 99, max: 100 } }); expect(output.params.extended_bounds).to.have.property('min', 99); @@ -106,10 +109,19 @@ describe('Histogram Agg', function () { it('does not write when nothing is set', function () { var output = paramWriter.write({ + min_doc_count: true, extended_bounds: {} }); expect(output.params).to.not.have.property('extended_bounds'); }); + + it('does not write when min_doc_count is false', function () { + var output = paramWriter.write({ + min_doc_count: false, + extended_bounds: { min: 99, max: 100 } + }); + expect(output.params).to.not.have.property('extended_bounds'); + }); }); }); }); diff --git a/src/ui/public/agg_types/buckets/histogram.js b/src/ui/public/agg_types/buckets/histogram.js index 14d292444b83..344ab964d005 100644 --- a/src/ui/public/agg_types/buckets/histogram.js +++ b/src/ui/public/agg_types/buckets/histogram.js @@ -51,7 +51,7 @@ export default function HistogramAggDefinition(Private) { write: function (aggConfig, output) { var val = aggConfig.params.extended_bounds; - if (val.min != null || val.max != null) { + if (aggConfig.params.min_doc_count && (val.min != null || val.max != null)) { output.params.extended_bounds = { min: val.min, max: val.max From c86ea46f093d27baa47839793a9e6e80a53d856a Mon Sep 17 00:00:00 2001 From: Kevin Kirsche Date: Sun, 21 Feb 2016 11:53:30 -0500 Subject: [PATCH 04/29] Update Bootstrap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CSS #16492: Use @input-border-radius variables on input groups. #16529: Un-style the caret on + + +
+ + +
+
+ + +
+ +
+ + +
diff --git a/src/ui/public/stringify/editors/duration.less b/src/ui/public/stringify/editors/duration.less new file mode 100644 index 000000000000..bde21dd4da8a --- /dev/null +++ b/src/ui/public/stringify/editors/duration.less @@ -0,0 +1,10 @@ +.editor-duration { + display: flex; + > .form-group { + flex: 1 1 1%; + padding-right: 5px; + &:last-child { + padding-right: 0; + } + } +} diff --git a/src/ui/public/stringify/register.js b/src/ui/public/stringify/register.js index b03389afc8c6..7b6657c48688 100644 --- a/src/ui/public/stringify/register.js +++ b/src/ui/public/stringify/register.js @@ -2,6 +2,7 @@ import fieldFormats from 'ui/registry/field_formats'; import stringifyUrl from 'ui/stringify/types/Url'; import stringifyBytes from 'ui/stringify/types/Bytes'; import stringifyDate from 'ui/stringify/types/Date'; +import stringifyDuration from 'ui/stringify/types/duration'; import stringifyIp from 'ui/stringify/types/Ip'; import stringifyNumber from 'ui/stringify/types/Number'; import stringifyPercent from 'ui/stringify/types/Percent'; @@ -12,6 +13,7 @@ import stringifyTruncate from 'ui/stringify/types/truncate'; fieldFormats.register(stringifyUrl); fieldFormats.register(stringifyBytes); fieldFormats.register(stringifyDate); +fieldFormats.register(stringifyDuration); fieldFormats.register(stringifyIp); fieldFormats.register(stringifyNumber); fieldFormats.register(stringifyPercent); diff --git a/src/ui/public/stringify/types/duration.js b/src/ui/public/stringify/types/duration.js new file mode 100644 index 000000000000..719f543da3e4 --- /dev/null +++ b/src/ui/public/stringify/types/duration.js @@ -0,0 +1,98 @@ +import 'ui/stringify/editors/duration.less'; +import _ from 'lodash'; +import moment from 'moment'; +import IndexPatternsFieldFormatProvider from 'ui/index_patterns/_field_format/FieldFormat'; +import durationTemplate from 'ui/stringify/editors/duration.html'; + +export default function DurationFormatProvider(Private) { + const ratioToSeconds = { + picoseconds: 0.000000000001, + nanoseconds: 0.000000001, + microseconds: 0.000001 + }; + const FieldFormat = Private(IndexPatternsFieldFormatProvider); + const HUMAN_FRIENDLY = 'humanize'; + const DEFAULT_OUTPUT_PRECISION = 2; + const DEFAULT_INPUT_FORMAT = { text: 'Seconds', kind: 'seconds' }; + const inputFormats = [ + { text: 'Picoseconds', kind: 'picoseconds' }, + { text: 'Nanoseconds', kind: 'nanoseconds' }, + { text: 'Microseconds', kind: 'microseconds' }, + { text: 'Milliseconds', kind: 'milliseconds' }, + DEFAULT_INPUT_FORMAT, + { text: 'Minutes', kind: 'minutes' }, + { text: 'Hours', kind: 'hours' }, + { text: 'Days', kind: 'days' }, + { text: 'Weeks', kind: 'weeks' }, + { text: 'Months', kind: 'months' }, + { text: 'Years', kind: 'years' } + ]; + const DEFAULT_OUTPUT_FORMAT = { text: 'Human Readable', method: 'humanize' }; + const outputFormats = [ + DEFAULT_OUTPUT_FORMAT, + { text: 'Milliseconds', method: 'asMilliseconds' }, + { text: 'Seconds', method: 'asSeconds' }, + { text: 'Minutes', method: 'asMinutes' }, + { text: 'Hours', method: 'asHours' }, + { text: 'Days', method: 'asDays' }, + { text: 'Weeks', method: 'asWeeks' }, + { text: 'Months', method: 'asMonths' }, + { text: 'Years', method: 'asYears' } + ]; + + class Duration extends FieldFormat { + isHuman() { + return this.param('outputFormat') === HUMAN_FRIENDLY; + } + _convert(val) { + const inputFormat = this.param('inputFormat'); + const outputFormat = this.param('outputFormat'); + const outputPrecision = this.param('outputPrecision'); + const human = this.isHuman(); + const prefix = val < 0 && human ? 'minus ' : ''; + const duration = parseInputAsDuration(val, inputFormat); + const formatted = duration[outputFormat](); + const precise = human ? formatted : formatted.toFixed(outputPrecision); + return prefix + precise; + } + } + + Duration.id = 'duration'; + Duration.title = 'Duration'; + Duration.fieldType = 'number'; + + Duration.inputFormats = inputFormats; + Duration.outputFormats = outputFormats; + + Duration.editor = { + template: durationTemplate, + controllerAs: 'cntrl', + controller($scope, $interval) { + this.sampleInputs = [ + -123, + 1, + 12, + 123, + 658, + 1988, + 3857, + 123292, + 923528271 + ]; + } + }; + + Duration.paramDefaults = { + inputFormat: DEFAULT_INPUT_FORMAT.kind, + outputFormat: DEFAULT_OUTPUT_FORMAT.method, + outputPrecision: DEFAULT_OUTPUT_PRECISION + }; + + return Duration; + + function parseInputAsDuration(val, inputFormat) { + const ratio = ratioToSeconds[inputFormat] || 1; + const kind = inputFormat in ratioToSeconds ? 'seconds' : inputFormat; + return moment.duration(val * ratio, kind); + } +}; From 1787f7704e3ba30fe0b42482a129f5a6d817c278 Mon Sep 17 00:00:00 2001 From: Rashid Khan Date: Fri, 11 Mar 2016 13:26:45 -0700 Subject: [PATCH 22/29] Fix typo, re: #6415 --- docs/x-axis-aggs.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/x-axis-aggs.asciidoc b/docs/x-axis-aggs.asciidoc index a39eb8a48a20..ee080453b092 100644 --- a/docs/x-axis-aggs.asciidoc +++ b/docs/x-axis-aggs.asciidoc @@ -28,7 +28,7 @@ remove a range. or bottom _n_ elements of a given field to display, ordered by count or a custom metric. *Filters*:: You can specify a set of {ref}/search-aggregations-bucket-filters-aggregation.html[_filters_] for the data. You can specify a filter as a query string or in JSON format, just as in the Discover search bar. Click *Add Filter* to -add another filter. Click the images:labelbutton.png[] *label* button to open the label field, where you can type in a +add another filter. Click the image:labelbutton.png[] *label* button to open the label field, where you can type in a name to display on the visualization. *Significant Terms*:: Displays the results of the experimental {ref}/search-aggregations-bucket-significantterms-aggregation.html[_significant terms_] aggregation. From 5a80f1be66c76ca3b3db939131cd08a66bbe6df0 Mon Sep 17 00:00:00 2001 From: Rashid Khan Date: Fri, 11 Mar 2016 15:20:21 -0700 Subject: [PATCH 23/29] Fix link to image --- docs/x-axis-aggs.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/x-axis-aggs.asciidoc b/docs/x-axis-aggs.asciidoc index ee080453b092..802625b0afac 100644 --- a/docs/x-axis-aggs.asciidoc +++ b/docs/x-axis-aggs.asciidoc @@ -28,7 +28,7 @@ remove a range. or bottom _n_ elements of a given field to display, ordered by count or a custom metric. *Filters*:: You can specify a set of {ref}/search-aggregations-bucket-filters-aggregation.html[_filters_] for the data. You can specify a filter as a query string or in JSON format, just as in the Discover search bar. Click *Add Filter* to -add another filter. Click the image:labelbutton.png[] *label* button to open the label field, where you can type in a +add another filter. Click the image:images/labelbutton.png[] *label* button to open the label field, where you can type in a name to display on the visualization. *Significant Terms*:: Displays the results of the experimental {ref}/search-aggregations-bucket-significantterms-aggregation.html[_significant terms_] aggregation. From 398239840dcb16c57225e9017af1dea6d54c22d7 Mon Sep 17 00:00:00 2001 From: spalger Date: Sun, 13 Mar 2016 14:28:29 -0700 Subject: [PATCH 24/29] [grunt/esvm] remove marvel config now that it is actually being applied --- tasks/config/esvm.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tasks/config/esvm.js b/tasks/config/esvm.js index 89bf4115333b..0b1618a53981 100644 --- a/tasks/config/esvm.js +++ b/tasks/config/esvm.js @@ -14,11 +14,6 @@ module.exports = function (grunt) { }, http: { port: 9200 - }, - marvel: { - agent: { - enabled: false - } } } }, From 5e3ee152703ccd4b7a187f4349fc100c87a09034 Mon Sep 17 00:00:00 2001 From: spalger Date: Mon, 14 Mar 2016 11:32:35 -0400 Subject: [PATCH 25/29] [npm] update grunt-esvm --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 646ddf0823ae..10acb41b6195 100644 --- a/package.json +++ b/package.json @@ -156,7 +156,7 @@ "grunt-cli": "0.1.13", "grunt-contrib-clean": "0.6.0", "grunt-contrib-copy": "0.8.1", - "grunt-esvm": "2.1.1", + "grunt-esvm": "3.0.0", "grunt-karma": "0.12.0", "grunt-run": "0.5.0", "grunt-s3": "0.2.0-alpha.3", From c8dfe250510b64322b968082883e6c9e4f4eec19 Mon Sep 17 00:00:00 2001 From: spalger Date: Mon, 14 Mar 2016 11:34:02 -0400 Subject: [PATCH 26/29] [npm] update libesvm --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 10acb41b6195..737e7b70cab7 100644 --- a/package.json +++ b/package.json @@ -174,7 +174,7 @@ "karma-ie-launcher": "0.2.0", "karma-mocha": "0.2.0", "karma-safari-launcher": "0.1.1", - "libesvm": "3.3.0", + "libesvm": "3.4.5", "license-checker": "3.1.0", "load-grunt-config": "0.7.2", "makelogs": "3.0.0-beta3", From ec037de9be78b08e0e53589a2ca561ff74c8c742 Mon Sep 17 00:00:00 2001 From: Nicolas Bevacqua Date: Mon, 14 Mar 2016 14:06:25 -0300 Subject: [PATCH 27/29] [test] Consolidate elasticsearch URL in configuration file. Fixes #5555 --- .../lib/__tests__/check_es_version.js | 4 +++- .../elasticsearch/lib/__tests__/health_check.js | 16 +++++++++++----- src/ui/public/utils/__tests__/scanner.js | 5 ++++- tasks/config/esvm.js | 6 +++--- test/utils/__tests__/getPage.js | 2 +- test/utils/kbn_server.js | 4 +++- 6 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/plugins/elasticsearch/lib/__tests__/check_es_version.js b/src/plugins/elasticsearch/lib/__tests__/check_es_version.js index 51424a841af4..1c1ece01c412 100644 --- a/src/plugins/elasticsearch/lib/__tests__/check_es_version.js +++ b/src/plugins/elasticsearch/lib/__tests__/check_es_version.js @@ -1,7 +1,9 @@ import _ from 'lodash'; import Promise from 'bluebird'; import sinon from 'sinon'; +import url from 'url'; +import serverConfig from '../../../../../test/serverConfig'; import checkEsVersion from '../check_es_version'; describe('plugins/elasticsearch', function () { @@ -23,7 +25,7 @@ describe('plugins/elasticsearch', function () { status: { red: sinon.stub() }, - url: 'http://localhost:9210' + url: url.format(serverConfig.servers.elasticsearch) } } }; diff --git a/src/plugins/elasticsearch/lib/__tests__/health_check.js b/src/plugins/elasticsearch/lib/__tests__/health_check.js index 3292ba67abb0..5065e7bc59ce 100644 --- a/src/plugins/elasticsearch/lib/__tests__/health_check.js +++ b/src/plugins/elasticsearch/lib/__tests__/health_check.js @@ -1,9 +1,15 @@ import Promise from 'bluebird'; import sinon from 'sinon'; import expect from 'expect.js'; +import url from 'url'; + const NoConnections = require('elasticsearch').errors.NoConnections; import healthCheck from '../health_check'; +import serverConfig from '../../../../../test/serverConfig'; + +const esPort = serverConfig.servers.elasticsearch.port; +const esUrl = url.format(serverConfig.servers.elasticsearch); describe('plugins/elasticsearch', function () { describe('lib/health_check', function () { @@ -39,7 +45,7 @@ describe('plugins/elasticsearch', function () { nodes: { 'node-01': { version: '1.5.0', - http_address: 'inet[/127.0.0.1:9210]', + http_address: `inet[/127.0.0.1:${esPort}]`, ip: '127.0.0.1' } } @@ -73,7 +79,7 @@ describe('plugins/elasticsearch', function () { it('should set the cluster red if the ping fails, then to green', function () { - get.withArgs('elasticsearch.url').returns('http://localhost:9210'); + get.withArgs('elasticsearch.url').returns(esUrl); get.withArgs('elasticsearch.engineVersion').returns('^1.4.4'); get.withArgs('kibana.index').returns('.my-kibana'); client.ping.onCall(0).returns(Promise.reject(new NoConnections())); @@ -85,7 +91,7 @@ describe('plugins/elasticsearch', function () { expect(plugin.status.yellow.args[0][0]).to.be('Waiting for Elasticsearch'); sinon.assert.calledOnce(plugin.status.red); expect(plugin.status.red.args[0][0]).to.be( - 'Unable to connect to Elasticsearch at http://localhost:9210.' + `Unable to connect to Elasticsearch at ${esUrl}.` ); sinon.assert.calledTwice(client.ping); sinon.assert.calledOnce(client.nodes.info); @@ -97,7 +103,7 @@ describe('plugins/elasticsearch', function () { }); it('should set the cluster red if the health check status is red, then to green', function () { - get.withArgs('elasticsearch.url').returns('http://localhost:9210'); + get.withArgs('elasticsearch.url').returns(esUrl); get.withArgs('elasticsearch.engineVersion').returns('^1.4.4'); get.withArgs('kibana.index').returns('.my-kibana'); client.ping.returns(Promise.resolve()); @@ -120,7 +126,7 @@ describe('plugins/elasticsearch', function () { }); it('should set the cluster yellow if the health check timed_out and create index', function () { - get.withArgs('elasticsearch.url').returns('http://localhost:9210'); + get.withArgs('elasticsearch.url').returns(esUrl); get.withArgs('elasticsearch.engineVersion').returns('^1.4.4'); get.withArgs('kibana.index').returns('.my-kibana'); client.ping.returns(Promise.resolve()); diff --git a/src/ui/public/utils/__tests__/scanner.js b/src/ui/public/utils/__tests__/scanner.js index 9e1c89d8d7c8..9abc4ca618c7 100644 --- a/src/ui/public/utils/__tests__/scanner.js +++ b/src/ui/public/utils/__tests__/scanner.js @@ -4,6 +4,9 @@ import Bluebird from 'bluebird'; import 'elasticsearch-browser'; import ngMock from 'ngMock'; import sinon from 'sinon'; +import url from 'url'; + +import serverConfig from '../../../../../test/serverConfig'; describe('Scanner', function () { let es; @@ -11,7 +14,7 @@ describe('Scanner', function () { beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (esFactory) { es = esFactory({ - host: 'http://localhost:9210', + host: url.format(serverConfig.servers.elasticsearch), defer: function () { return Bluebird.defer(); } diff --git a/tasks/config/esvm.js b/tasks/config/esvm.js index 89bf4115333b..6e740b0bae05 100644 --- a/tasks/config/esvm.js +++ b/tasks/config/esvm.js @@ -2,7 +2,7 @@ module.exports = function (grunt) { var resolve = require('path').resolve; var directory = resolve(__dirname, '../../esvm'); var dataDir = resolve(directory, 'data_dir'); - var uiConfig = require('../../test/serverConfig'); + var serverConfig = require('../../test/serverConfig'); return { options: { @@ -41,7 +41,7 @@ module.exports = function (grunt) { purge: true, config: { http: { - port: 9210 + port: serverConfig.servers.elasticsearch.port }, cluster: { name: 'esvm-test' @@ -55,7 +55,7 @@ module.exports = function (grunt) { purge: true, config: { http: { - port: uiConfig.servers.elasticsearch.port + port: serverConfig.servers.elasticsearch.port }, cluster: { name: 'esvm-ui' diff --git a/test/utils/__tests__/getPage.js b/test/utils/__tests__/getPage.js index 19ce3a1fae24..1c2b0bf2dd87 100644 --- a/test/utils/__tests__/getPage.js +++ b/test/utils/__tests__/getPage.js @@ -13,7 +13,7 @@ describe('getUrl', function () { expect(url).to.be('http://localhost/foo'); }); - it('should convert to a secure url with port', function () { + it('should convert to a url with port', function () { var url = getUrl({ protocol: 'http', hostname: 'localhost', diff --git a/test/utils/kbn_server.js b/test/utils/kbn_server.js index eb77401615dc..cc5649669cb1 100644 --- a/test/utils/kbn_server.js +++ b/test/utils/kbn_server.js @@ -1,8 +1,10 @@ +import url from 'url'; import { defaultsDeep, set } from 'lodash'; import { header as basicAuthHeader } from './base_auth'; import { kibanaUser, kibanaServer } from '../shield'; import KbnServer from '../../src/server/KbnServer'; import fromRoot from '../../src/utils/fromRoot'; +import serverConfig from '../serverConfig'; const SERVER_DEFAULTS = { server: { @@ -23,7 +25,7 @@ const SERVER_DEFAULTS = { enabled: false }, elasticsearch: { - url: 'http://localhost:9210', + url: url.format(serverConfig.servers.elasticsearch), username: kibanaServer.username, password: kibanaServer.password } From 7969c8da2b6b8ebea96b6987673acda305b5691c Mon Sep 17 00:00:00 2001 From: spalger Date: Mon, 14 Mar 2016 12:28:21 -0400 Subject: [PATCH 28/29] [npm] update grunt-esvm, remove libesvm --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 737e7b70cab7..54d63bb954fc 100644 --- a/package.json +++ b/package.json @@ -156,7 +156,7 @@ "grunt-cli": "0.1.13", "grunt-contrib-clean": "0.6.0", "grunt-contrib-copy": "0.8.1", - "grunt-esvm": "3.0.0", + "grunt-esvm": "3.0.3", "grunt-karma": "0.12.0", "grunt-run": "0.5.0", "grunt-s3": "0.2.0-alpha.3", @@ -174,7 +174,6 @@ "karma-ie-launcher": "0.2.0", "karma-mocha": "0.2.0", "karma-safari-launcher": "0.1.1", - "libesvm": "3.4.5", "license-checker": "3.1.0", "load-grunt-config": "0.7.2", "makelogs": "3.0.0-beta3", From 2618d1aa4db0d6cae6565f57e58943bef1b948ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Bevacqua?= Date: Mon, 14 Mar 2016 16:00:38 -0300 Subject: [PATCH 29/29] Removed typo --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6cbdae5c3e23..19dffe7114a1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -218,7 +218,7 @@ So, you've been assigned a pull to review. What's that look like? Remember, someone is blocked by a pull awaiting review, make it count. Be thorough, the more action items you catch in the first review, the less back and forth will be required, and the better chance the pull has of being successful. Don't you like success? -1. **Understand the issue** that is being fixed, or the feature being added. Check the description on the pull, and check out the related issue. If you don't understand something, ask the person the submitter for clarification. +1. **Understand the issue** that is being fixed, or the feature being added. Check the description on the pull, and check out the related issue. If you don't understand something, ask the submitter for clarification. 1. **Reproduce the bug** (or the lack of feature I guess?) in the destination branch, usually `master`. The referenced issue will help you here. If you're unable to reproduce the issue, contact the issue submitter for clarification 1. **Check out the pull** and test it. Is the issue fixed? Does it have nasty side effects? Try to create suspect inputs. If it operates on the value of a field try things like: strings (including an empty string), null, numbers, dates. Try to think of edge cases that might break the code. 1. **Merge the target branch**. It is possible that tests or the linter have been updated in the target branch since the pull was submitted. Merging the pull could cause core to start failing.