Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 9A291200C30 for ; Tue, 7 Mar 2017 19:45:33 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 98D8A160B68; Tue, 7 Mar 2017 18:45:33 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id DFF52160B65 for ; Tue, 7 Mar 2017 19:45:32 +0100 (CET) Received: (qmail 2999 invoked by uid 500); 7 Mar 2017 18:45:32 -0000 Mailing-List: contact commits-help@asterixdb.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@asterixdb.apache.org Delivered-To: mailing list commits@asterixdb.apache.org Received: (qmail 2990 invoked by uid 99); 7 Mar 2017 18:45:32 -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; Tue, 07 Mar 2017 18:45:32 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 0689FDFC4A; Tue, 7 Mar 2017 18:45:32 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: mblow@apache.org To: commits@asterixdb.apache.org Message-Id: <7c2141e6248b4634987d24a424d5f8e7@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: asterixdb git commit: Fix Windows Startup Regression Date: Tue, 7 Mar 2017 18:45:32 +0000 (UTC) archived-at: Tue, 07 Mar 2017 18:45:33 -0000 Repository: asterixdb Updated Branches: refs/heads/master 4d7a17d6d -> 02aa1dd82 Fix Windows Startup Regression - Fix error in regex when using Windows file separator (i.e. backslash) preventing server start - Added tests to prevent future regressions of the same Change-Id: Ie83930572d79a587b85c3de2b2a3191c5e8bf77f Reviewed-on: https://asterix-gerrit.ics.uci.edu/1556 Sonar-Qube: Jenkins Tested-by: Jenkins Reviewed-by: Till Westmann Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/02aa1dd8 Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/02aa1dd8 Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/02aa1dd8 Branch: refs/heads/master Commit: 02aa1dd820b584b05aa5875038a4b96142b266cc Parents: 4d7a17d Author: Michael Blow Authored: Tue Mar 7 12:28:49 2017 -0500 Committer: Michael Blow Committed: Tue Mar 7 10:44:22 2017 -0800 ---------------------------------------------------------------------- .../org/apache/hyracks/util/file/FileUtil.java | 19 +++++++-- .../apache/hyracks/util/file/FileUtilTest.java | 44 ++++++++++++++++++++ 2 files changed, 60 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/02aa1dd8/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/file/FileUtil.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/file/FileUtil.java b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/file/FileUtil.java index d44f1b4..d6e175e 100644 --- a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/file/FileUtil.java +++ b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/file/FileUtil.java @@ -19,14 +19,27 @@ package org.apache.hyracks.util.file; import java.io.File; +import java.util.regex.Pattern; public class FileUtil { + private FileUtil() { } public static String joinPath(String... elements) { - return String.join(File.separator, elements) - .replaceAll("([^:])(" + File.separator + ")+", "$1$2") - .replaceAll(File.separator + "$", ""); + return joinPath(File.separatorChar, elements); + } + + static String joinPath(char separatorChar, String... elements) { + final String separator = String.valueOf(separatorChar); + final String escapedSeparator = Pattern.quote(separator); + String joined = String.join(separator, elements); + if (separatorChar == '\\') { + // preserve leading double-slash on windows (UNC) + return joined.replaceAll("([^" + escapedSeparator + "])(" + escapedSeparator + ")+", "$1$2") + .replaceAll(escapedSeparator + "$", ""); + } else { + return joined.replaceAll("(" + escapedSeparator + ")+", "$1").replaceAll(escapedSeparator + "$", ""); + } } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/02aa1dd8/hyracks-fullstack/hyracks/hyracks-util/src/test/java/org/apache/hyracks/util/file/FileUtilTest.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/hyracks/hyracks-util/src/test/java/org/apache/hyracks/util/file/FileUtilTest.java b/hyracks-fullstack/hyracks/hyracks-util/src/test/java/org/apache/hyracks/util/file/FileUtilTest.java new file mode 100644 index 0000000..8d6c631 --- /dev/null +++ b/hyracks-fullstack/hyracks/hyracks-util/src/test/java/org/apache/hyracks/util/file/FileUtilTest.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.hyracks.util.file; + +import static org.apache.hyracks.util.file.FileUtil.joinPath; + +import org.junit.Assert; +import org.junit.Test; + +public class FileUtilTest { + + @Test + public void testUnixPaths() { + Assert.assertEquals("/tmp/far/baz/lala", joinPath('/', "/tmp/", "/", "far", "baz/", "///lala")); + Assert.assertEquals("tmp/far/bar", joinPath('/', "tmp//far", "bar")); + Assert.assertEquals("/tmp/far/bar", joinPath('/', "/tmp/", "far", "bar/")); + Assert.assertEquals("/tmp/far/bar", joinPath('/', "/" + "/tmp/", "far", "bar/")); + } + + @Test + public void testWindozePaths() { + Assert.assertEquals("C:\\temp\\far\\baz\\lala", + joinPath('\\', "C:\\", "temp\\", "\\far", "\\baz\\", "\\", "\\", "\\lala")); + Assert.assertEquals("\\\\myserver\\tmp\\far\\baz\\lala", + joinPath('\\', "\\\\myserver\\tmp\\\\far\\baz\\\\\\\\lala")); + Assert.assertEquals("C:\\temp\\far\\baz\\lala", joinPath('\\', "C:\\temp\\\\far\\baz\\\\\\\\lala\\")); + } +}