Fix the getting of the Git author name when user.name isn't set

The config variable is not required, as Git will get the user's name
from other system settings, like the gecos field in /etc/passwd. So
adapt Qt Creator to use the same mechanism that Git does.

Change-Id: I255870833a024a36adf6ffff13ecb43cc0c45bbf
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
This commit is contained in:
Thiago Macieira
2015-06-30 20:14:36 -07:00
parent 1096a101e9
commit d6da30d77a
2 changed files with 30 additions and 4 deletions

View File

@@ -2484,8 +2484,19 @@ bool GitClient::getCommitData(const QString &workingDirectory,
commitData.amendSHA1.clear(); commitData.amendSHA1.clear();
} }
if (!authorFromCherryPick) { if (!authorFromCherryPick) {
commitData.panelData.author = readConfigValue(workingDirectory, QLatin1String("user.name")); // the format is:
commitData.panelData.email = readConfigValue(workingDirectory, QLatin1String("user.email")); // Joe Developer <joedev@example.com> unixtimestamp +HHMM
QString author_info = readGitVar(workingDirectory, QLatin1String("GIT_AUTHOR_IDENT"));
int lt = author_info.lastIndexOf(QLatin1Char('<'));
int gt = author_info.lastIndexOf(QLatin1Char('>'));
if (gt == -1 || uint(lt) > uint(gt)) {
// shouldn't happen!
commitData.panelData.author.clear();
commitData.panelData.email.clear();
} else {
commitData.panelData.author = author_info.left(lt - 1);
commitData.panelData.email = author_info.mid(lt + 1, gt - lt - 1);
}
} }
// Commit: Get the commit template // Commit: Get the commit template
QString templateFilename = gitDirectory.absoluteFilePath(QLatin1String("MERGE_MSG")); QString templateFilename = gitDirectory.absoluteFilePath(QLatin1String("MERGE_MSG"));
@@ -3083,14 +3094,26 @@ bool GitClient::synchronousStashList(const QString &workingDirectory,
// Read a single-line config value, return trimmed // Read a single-line config value, return trimmed
QString GitClient::readConfigValue(const QString &workingDirectory, const QString &configVar) const QString GitClient::readConfigValue(const QString &workingDirectory, const QString &configVar) const
{
QStringList arguments;
arguments << QLatin1String("config") << configVar;
return readOneLine(workingDirectory, arguments);
}
QString GitClient::readGitVar(const QString &workingDirectory, const QString &configVar) const
{
QStringList arguments;
arguments << QLatin1String("var") << configVar;
return readOneLine(workingDirectory, arguments);
}
QString GitClient::readOneLine(const QString &workingDirectory, const QStringList &arguments) const
{ {
// msysGit always uses UTF-8 for configuration: // msysGit always uses UTF-8 for configuration:
// https://github.com/msysgit/msysgit/wiki/Git-for-Windows-Unicode-Support#convert-config-files // https://github.com/msysgit/msysgit/wiki/Git-for-Windows-Unicode-Support#convert-config-files
static QTextCodec *codec = HostOsInfo::isWindowsHost() static QTextCodec *codec = HostOsInfo::isWindowsHost()
? QTextCodec::codecForName("UTF-8") ? QTextCodec::codecForName("UTF-8")
: QTextCodec::codecForLocale(); : QTextCodec::codecForLocale();
QStringList arguments;
arguments << QLatin1String("config") << configVar;
QByteArray outputText; QByteArray outputText;
if (!vcsFullySynchronousExec(workingDirectory, arguments, &outputText, 0, silentFlags)) if (!vcsFullySynchronousExec(workingDirectory, arguments, &outputText, 0, silentFlags))

View File

@@ -293,6 +293,7 @@ public:
const QString &messge, QString *name, const QString &messge, QString *name,
QString *errorMessage = 0) const; QString *errorMessage = 0) const;
QString readGitVar(const QString &workingDirectory, const QString &configVar) const;
QString readConfigValue(const QString &workingDirectory, const QString &configVar) const; QString readConfigValue(const QString &workingDirectory, const QString &configVar) const;
QTextCodec *encoding(const QString &workingDirectory, const QByteArray &configVar) const; QTextCodec *encoding(const QString &workingDirectory, const QByteArray &configVar) const;
@@ -370,6 +371,8 @@ private:
// determine version as '(major << 16) + (minor << 8) + patch' or 0. // determine version as '(major << 16) + (minor << 8) + patch' or 0.
unsigned synchronousGitVersion(QString *errorMessage = 0) const; unsigned synchronousGitVersion(QString *errorMessage = 0) const;
QString readOneLine(const QString &workingDirectory, const QStringList &arguments) const;
enum RevertResult { RevertOk, RevertUnchanged, RevertCanceled, RevertFailed }; enum RevertResult { RevertOk, RevertUnchanged, RevertCanceled, RevertFailed };
RevertResult revertI(QStringList files, RevertResult revertI(QStringList files,
bool *isDirectory, bool *isDirectory,