diff --git a/docs/ug/runSh.md b/docs/ug/runSh.md index bdbde85492..618f45f931 100644 --- a/docs/ug/runSh.md +++ b/docs/ug/runSh.md @@ -28,4 +28,5 @@ Depending on which version you wish to use for report generation, add one of the * `--release`: Use the latest release (Stable) * `--master`: Use the latest version of the master branch * `--tag TAG` (e.g. `--tag v1.6.1`): Use the version identified by the Git tag given +* `--latest TAG_PREFIX`: Use the latest version with the given tag prefix (e.g. `--latest v1.6` can use `v1.6.1`) * `--commit COMMIT` (e.g. `--commit abc123`): Use the version identified by the Git commit SHA given diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 5e77947b09..32f66cf1d3 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -24,7 +24,7 @@ "minimatch": "^9.0.0", "muicss": "^0.10.3", "normalize.css": "^8.0.1", - "postcss": "^8.4.38", + "postcss": "^8.4.39", "pug-lint-vue": "^0.4.0", "seedrandom": "^3.0.5", "vue": "~3.4.0", @@ -51,7 +51,7 @@ "eslint-plugin-import": "^2.29.1", "eslint-plugin-vue": "^9.0.0", "postcss-html": "^1.6.0", - "pug": "^3.0.2", + "pug": "^3.0.3", "pug-plain-loader": "^1.1.0", "sass": "^1.71.0", "sass-loader": "^14.0.0", @@ -4404,8 +4404,9 @@ }, "node_modules/assert-never": { "version": "1.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz", + "integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==", + "dev": true }, "node_modules/astral-regex": { "version": "2.0.0", @@ -4588,8 +4589,9 @@ }, "node_modules/babel-walk": { "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.9.6" }, @@ -4762,11 +4764,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, - "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -5977,8 +5980,9 @@ }, "node_modules/doctypes": { "version": "1.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", + "dev": true }, "node_modules/dom-converter": { "version": "0.2.0", @@ -7207,9 +7211,10 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, - "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -7551,6 +7556,20 @@ "version": "1.0.0", "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "license": "MIT", @@ -8399,8 +8418,9 @@ }, "node_modules/is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -10130,8 +10150,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "license": "ISC" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -10244,7 +10265,9 @@ } }, "node_modules/postcss": { - "version": "8.4.38", + "version": "8.4.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", + "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", "funding": [ { "type": "opencollective", @@ -10259,10 +10282,9 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", + "picocolors": "^1.0.1", "source-map-js": "^1.2.0" }, "engines": { @@ -10962,11 +10984,12 @@ "license": "ISC" }, "node_modules/pug": { - "version": "3.0.2", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz", + "integrity": "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==", "dev": true, - "license": "MIT", "dependencies": { - "pug-code-gen": "^3.0.2", + "pug-code-gen": "^3.0.3", "pug-filters": "^4.0.0", "pug-lexer": "^5.0.1", "pug-linker": "^4.0.0", @@ -10978,8 +11001,9 @@ }, "node_modules/pug-attrs": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", "dev": true, - "license": "MIT", "dependencies": { "constantinople": "^4.0.1", "js-stringify": "^1.0.2", @@ -10987,24 +11011,26 @@ } }, "node_modules/pug-code-gen": { - "version": "3.0.2", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.3.tgz", + "integrity": "sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==", "dev": true, - "license": "MIT", "dependencies": { "constantinople": "^4.0.1", "doctypes": "^1.1.0", "js-stringify": "^1.0.2", "pug-attrs": "^3.0.0", - "pug-error": "^2.0.0", - "pug-runtime": "^3.0.0", + "pug-error": "^2.1.0", + "pug-runtime": "^3.0.1", "void-elements": "^3.1.0", "with": "^7.0.0" } }, "node_modules/pug-error": { - "version": "2.0.0", - "dev": true, - "license": "MIT" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", + "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", + "dev": true }, "node_modules/pug-filters": { "version": "4.0.0", @@ -11341,8 +11367,9 @@ }, "node_modules/pug-runtime": { "version": "3.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", + "dev": true }, "node_modules/pug-strip-comments": { "version": "2.0.0", @@ -13457,8 +13484,9 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -13980,8 +14008,9 @@ }, "node_modules/void-elements": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -14770,8 +14799,9 @@ }, "node_modules/with": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/parser": "^7.9.6", "@babel/types": "^7.9.6", diff --git a/frontend/package.json b/frontend/package.json index 2e23678c4b..c605edcb00 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -29,7 +29,7 @@ "minimatch": "^9.0.0", "muicss": "^0.10.3", "normalize.css": "^8.0.1", - "postcss": "^8.4.38", + "postcss": "^8.4.39", "pug-lint-vue": "^0.4.0", "seedrandom": "^3.0.5", "vue": "~3.4.0", @@ -56,7 +56,7 @@ "eslint-plugin-import": "^2.29.1", "eslint-plugin-vue": "^9.0.0", "postcss-html": "^1.6.0", - "pug": "^3.0.2", + "pug": "^3.0.3", "pug-plain-loader": "^1.1.0", "sass": "^1.71.0", "sass-loader": "^14.0.0", diff --git a/src/main/java/reposense/RepoSense.java b/src/main/java/reposense/RepoSense.java index 36daa4d751..330d823538 100644 --- a/src/main/java/reposense/RepoSense.java +++ b/src/main/java/reposense/RepoSense.java @@ -32,7 +32,7 @@ public class RepoSense { private static final Logger logger = LogsManager.getLogger(RepoSense.class); private static final int SERVER_PORT_NUMBER = 9000; - private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E MMM d HH:mm:ss yyyy z"); + private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E, d MMM yyyy HH:mm:ss z"); private static final String VERSION_UNSPECIFIED = "unspecified"; /** diff --git a/src/main/java/reposense/parser/BlurbMarkdownParser.java b/src/main/java/reposense/parser/BlurbMarkdownParser.java index 8c3e5a0f67..a67c0a77cf 100644 --- a/src/main/java/reposense/parser/BlurbMarkdownParser.java +++ b/src/main/java/reposense/parser/BlurbMarkdownParser.java @@ -93,6 +93,10 @@ public BlurbMap parse() throws IOException, InvalidMarkdownException { // extract the url record first // this is guaranteed to be in the first line or else we fail UrlRecord urlRecord = this.getUrlRecord(mdLines, counter); + // if delimiter is the last non-blank line, null is returned + if (urlRecord == null) { + break; + } url = urlRecord.getUrl(); counter = urlRecord.getNextPosition(); @@ -120,9 +124,17 @@ private UrlRecord getUrlRecord(List lines, int position) throws InvalidM // checks if url is valid // adapted from https://www.baeldung.com/java-validate-url try { - String url = lines.get(position).strip(); + String url = ""; + // skips blank lines + while (url.length() == 0) { + // checks if delimiter is the last non-blank line + if (position >= lines.size()) { + return null; + } + url = lines.get(position++).strip(); + } new URL(url).toURI(); - return new UrlRecord(lines.get(position), position + 1); + return new UrlRecord(url, position); } catch (MalformedURLException | URISyntaxException ex) { throw new InvalidMarkdownException("URL provided is not valid!"); } diff --git a/src/systemtest/resources/ConfigSystemTest/blurbs.md b/src/systemtest/resources/ConfigSystemTest/blurbs.md index e8a130cc46..65c08242a9 100644 --- a/src/systemtest/resources/ConfigSystemTest/blurbs.md +++ b/src/systemtest/resources/ConfigSystemTest/blurbs.md @@ -8,6 +8,7 @@ https://www.github.com/user/repo/branch2 this is what i have done for my cs2103t project + https://www.github.com/user/repo/branch3 *third blurb* diff --git a/src/test/resources/BlurbMarkdownParserTest/multiple_blurbs.md b/src/test/resources/BlurbMarkdownParserTest/multiple_blurbs.md index b49af3b1e7..2585e02296 100644 --- a/src/test/resources/BlurbMarkdownParserTest/multiple_blurbs.md +++ b/src/test/resources/BlurbMarkdownParserTest/multiple_blurbs.md @@ -7,6 +7,8 @@ Master branch of testrepo-Beta https://github.com/reposense/testrepo-Gamma/tree/master Master branch of testrepo-Gamma + https://github.com/reposense/testrepo-Sigma/tree/master Master branch of testrepo-Sigma +