// this is a comment, no blank lines please
// name/value separator should be equals to MessageStoreImplRepositoryTest.TEST_FILE_FIELD_SEPARATOR
Return-Path : <common-dev-return-77583-apmail-hadoop-common-dev-archive=hadoop.apache.org@hadoop.apache.org>
X-Original-To : apmail-hadoop-common-dev-archive@www.apache.org
Delivered-To : apmail-hadoop-common-dev-archive@www.apache.org
Received : from mail.apache.org (hermes.apache.org [140.211.11.3])	by minotaur.apache.org (Postfix) with SMTP id 04D6296E1	for <apmail-hadoop-common-dev-archive@www.apache.org>; Wed,  1 Feb 2012 00:23:25 +0000 (UTC)
Received : (qmail 97997 invoked by uid 500); 1 Feb 2012 00:23:21 -0000
Delivered-To : apmail-hadoop-common-dev-archive@hadoop.apache.org
Received : (qmail 97504 invoked by uid 500); 1 Feb 2012 00:23:20 -0000
Mailing-List : contact common-dev-help@hadoop.apache.org; run by ezmlm
Precedence : bulk
List-Help : <mailto:common-dev-help@hadoop.apache.org>
List-Unsubscribe : <mailto:common-dev-unsubscribe@hadoop.apache.org>
List-Post : <mailto:common-dev@hadoop.apache.org>
List-Id : <common-dev.hadoop.apache.org>
Reply-To : common-dev@hadoop.apache.org
Delivered-To : mailing list common-dev@hadoop.apache.org
Received : (qmail 97483 invoked by uid 99); 1 Feb 2012 00:23:20 -0000
Received : from nike.apache.org (HELO nike.apache.org) (192.87.106.230)    by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 01 Feb 2012 00:23:20 +0000
X-ASF-Spam-Status : No, hits=-2000.0 required=5.0	tests=ALL_TRUSTED,T_RP_MATCHES_RCVD
X-Spam-Check-By : apache.org
Received : from [140.211.11.116] (HELO hel.zones.apache.org) (140.211.11.116)    by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 01 Feb 2012 00:23:17 +0000
Received : from hel.zones.apache.org (hel.zones.apache.org [140.211.11.116])	by hel.zones.apache.org (Postfix) with ESMTP id CF2F31679FA	for <common-dev@hadoop.apache.org>; Wed,  1 Feb 2012 00:22:56 +0000 (UTC)
Date : Wed, 1 Feb 2012 00:22:56 +0000 (UTC)
From : "Roman Shaposhnik (Created) (JIRA)" <jira@apache.org>
To : common-dev@hadoop.apache.org
Message-ID : <250130243.649.1328055776849.JavaMail.tomcat@hel.zones.apache.org>
Subject : [jira] [Created] (HADOOP-8010) hadoop-config.sh spews error message when HADOOP_HOME_WARN_SUPPRESS is set to true and HADOOP_HOME is present
MIME-Version : 1.0
Content-Type : text/plain; charset=utf-8
Content-Transfer-Encoding : 7bit
X-JIRA-FingerPrint : 30527f35849b9dde25b450d4833f0394
X-Virus-Checked : Checked by ClamAV on apache.org
jcr:primaryType : nt:unstructured
jcr:text : 250130243.649.1328055776849.JavaMail.tomcat@hel.zones.apache.org
// sling_resourceType instead of sling:resourceType beacause of javax.jcr.NamespaceException otherwise
sling_resourceType : mailarchiveserver/message