Don't allow null name or e-mail in PersonIdent

toExternalString, equals and hashCode don't expect them to be null, so
explicitly disallow it in the constructor.

Also fix the documentation of setAuthor and setCommitter in
CommitCommand when specifying name and email as separate arguments.

Bug: 352984
Change-Id: I0ac994ae8e47789d38f7c6e6db55d482f0f1bac3
This commit is contained in:
Robin Stocker 2012-10-13 18:38:51 +02:00
parent 14164e040c
commit 6dadc801bd
3 changed files with 49 additions and 40 deletions

View File

@ -73,4 +73,14 @@ public void test002_NewIdent() {
assertEquals("A U Thor <author@example.com> 1142878501 +0230",
p.toExternalString());
}
@Test(expected = IllegalArgumentException.class)
public void nullForNameShouldThrowIllegalArgumentException() {
new PersonIdent(null, "author@example.com");
}
@Test(expected = IllegalArgumentException.class)
public void nullForEmailShouldThrowIllegalArgumentException() {
new PersonIdent("A U Thor", null);
}
}

View File

@ -548,9 +548,8 @@ public CommitCommand setCommitter(PersonIdent committer) {
/**
* Sets the committer for this {@code commit}. If no committer is explicitly
* specified because this method is never called or called with {@code null}
* value then the committer will be deduced from config info in repository,
* with current time.
* specified because this method is never called then the committer will be
* deduced from config info in repository, with current time.
*
* @param name
* the name of the committer used for the {@code commit}
@ -591,9 +590,8 @@ public CommitCommand setAuthor(PersonIdent author) {
/**
* Sets the author for this {@code commit}. If no author is explicitly
* specified because this method is never called or called with {@code null}
* value then the author will be set to the committer or to the original
* author when amending.
* specified because this method is never called then the author will be set
* to the committer or to the original author when amending.
*
* @param name
* the name of the author used for the {@code commit}

View File

@ -78,11 +78,7 @@ public class PersonIdent implements Serializable {
* @param repo
*/
public PersonIdent(final Repository repo) {
final UserConfig config = repo.getConfig().get(UserConfig.KEY);
name = config.getCommitterName();
emailAddress = config.getCommitterEmail();
when = SystemReader.getInstance().getCurrentTime();
tzOffset = SystemReader.getInstance().getTimezone(when);
this(repo.getConfig().get(UserConfig.KEY));
}
/**
@ -102,10 +98,7 @@ public PersonIdent(final PersonIdent pi) {
* @param aEmailAddress
*/
public PersonIdent(final String aName, final String aEmailAddress) {
name = aName;
emailAddress = aEmailAddress;
when = SystemReader.getInstance().getCurrentTime();
tzOffset = SystemReader.getInstance().getTimezone(when);
this(aName, aEmailAddress, SystemReader.getInstance().getCurrentTime());
}
/**
@ -131,10 +124,7 @@ public PersonIdent(final PersonIdent pi, final Date when, final TimeZone tz) {
* local time
*/
public PersonIdent(final PersonIdent pi, final Date aWhen) {
name = pi.getName();
emailAddress = pi.getEmailAddress();
when = aWhen.getTime();
tzOffset = pi.tzOffset;
this(pi.getName(), pi.getEmailAddress(), aWhen.getTime(), pi.tzOffset);
}
/**
@ -149,10 +139,32 @@ public PersonIdent(final PersonIdent pi, final Date aWhen) {
*/
public PersonIdent(final String aName, final String aEmailAddress,
final Date aWhen, final TimeZone aTZ) {
name = aName;
emailAddress = aEmailAddress;
when = aWhen.getTime();
tzOffset = aTZ.getOffset(when) / (60 * 1000);
this(aName, aEmailAddress, aWhen.getTime(), aTZ.getOffset(aWhen
.getTime()) / (60 * 1000));
}
/**
* Copy a PersonIdent, but alter the clone's time stamp
*
* @param pi
* original {@link PersonIdent}
* @param aWhen
* local time stamp
* @param aTZ
* time zone
*/
public PersonIdent(final PersonIdent pi, final long aWhen, final int aTZ) {
this(pi.getName(), pi.getEmailAddress(), aWhen, aTZ);
}
private PersonIdent(final String aName, final String aEmailAddress,
long when) {
this(aName, aEmailAddress, when, SystemReader.getInstance()
.getTimezone(when));
}
private PersonIdent(final UserConfig config) {
this(config.getCommitterName(), config.getCommitterEmail());
}
/**
@ -167,29 +179,18 @@ public PersonIdent(final String aName, final String aEmailAddress,
*/
public PersonIdent(final String aName, final String aEmailAddress,
final long aWhen, final int aTZ) {
if (aName == null)
throw new IllegalArgumentException(
"Name of PersonIdent must not be null.");
if (aEmailAddress == null)
throw new IllegalArgumentException(
"E-mail address of PersonIdent must not be null.");
name = aName;
emailAddress = aEmailAddress;
when = aWhen;
tzOffset = aTZ;
}
/**
* Copy a PersonIdent, but alter the clone's time stamp
*
* @param pi
* original {@link PersonIdent}
* @param aWhen
* local time stamp
* @param aTZ
* time zone
*/
public PersonIdent(final PersonIdent pi, final long aWhen, final int aTZ) {
name = pi.getName();
emailAddress = pi.getEmailAddress();
when = aWhen;
tzOffset = aTZ;
}
/**
* @return Name of person
*/