Mercurial > hg > easyhg
comparison src/hgrunner.cpp @ 455:856da063d76e
Remove stale auth cache files
author | Chris Cannam |
---|---|
date | Wed, 29 Jun 2011 16:18:47 +0100 |
parents | 66ec8b2ee946 |
children | 319f920a51ee |
comparison
equal
deleted
inserted
replaced
454:6f5acaf27d60 | 455:856da063d76e |
---|---|
389 m_queue.pop_front(); | 389 m_queue.pop_front(); |
390 DEBUG << "checkQueue: have action: running " << toRun.action << endl; | 390 DEBUG << "checkQueue: have action: running " << toRun.action << endl; |
391 startCommand(toRun); | 391 startCommand(toRun); |
392 } | 392 } |
393 | 393 |
394 QStringList HgRunner::addExtensionOptions(QStringList params) | 394 void HgRunner::pruneOldAuthFiles() |
395 { | 395 { |
396 QString extpath = getExtensionLocation(); | 396 QString path = QDesktopServices::storageLocation |
397 if (extpath == "") { | 397 (QDesktopServices::CacheLocation); |
398 DEBUG << "HgRunner::addExtensionOptions: Failed to get extension location" << endl; | 398 QDir d(path); |
399 return params; | 399 if (!d.exists()) return; |
400 } | 400 QStringList filters; |
401 | 401 filters << "easyhg.*.dat"; |
402 QStringList fl = d.entryList(filters); | |
403 foreach (QString f, fl) { | |
404 QStringList parts = f.split('.'); | |
405 if (parts.size() > 1) { | |
406 int pid = parts[1].toInt(); | |
407 DEBUG << "Checking pid " << pid << " for cache file " << f << endl; | |
408 | |
409 ProcessStatus ps = GetProcessStatus(pid); | |
410 if (ps == ProcessNotRunning) { | |
411 DEBUG << "Removing stale cache file " << f << endl; | |
412 QDir(d).remove(f); | |
413 } | |
414 } | |
415 } | |
416 } | |
417 | |
418 QString HgRunner::getAuthFilePath() | |
419 { | |
402 if (m_authFilePath == "") { | 420 if (m_authFilePath == "") { |
403 | 421 |
404 QByteArray key = randomKey(); | 422 pruneOldAuthFiles(); |
405 if (key == QByteArray()) { | |
406 DEBUG << "HgRunner::addExtensionOptions: Failed to get proper auth key" << endl; | |
407 return params; | |
408 } | |
409 QString key16 = QString::fromLocal8Bit(key.toBase64()).left(16); | |
410 | 423 |
411 QByteArray fileExt = randomKey(); | 424 QByteArray fileExt = randomKey(); |
412 if (fileExt == QByteArray()) { | 425 if (fileExt == QByteArray()) { |
413 DEBUG << "HgRunner::addExtensionOptions: Failed to get proper auth file ext" << endl; | 426 DEBUG << "HgRunner::addExtensionOptions: Failed to get proper auth file ext" << endl; |
414 return params; | 427 return ""; |
415 } | 428 } |
416 QString fileExt16 = QString::fromLocal8Bit(fileExt.toBase64()).left(16) | 429 QString fileExt16 = QString::fromLocal8Bit(fileExt.toBase64()).left(16) |
417 .replace('+', '-').replace('/', '.'); | 430 .replace('+', '-').replace('/', '_'); |
418 QString path = QDesktopServices::storageLocation | 431 QString path = QDesktopServices::storageLocation |
419 (QDesktopServices::CacheLocation); | 432 (QDesktopServices::CacheLocation); |
420 QDir().mkpath(path); | 433 QDir().mkpath(path); |
421 if (path == "") { | 434 if (path == "") { |
422 DEBUG << "HgRunner::addExtensionOptions: Failed to get cache location" << endl; | 435 DEBUG << "HgRunner::addExtensionOptions: Failed to get cache location" << endl; |
423 return params; | 436 return ""; |
424 } | 437 } |
425 | 438 |
439 m_authFilePath = QString("%1/easyhg.%2.%3.dat").arg(path) | |
440 .arg(getpid()).arg(fileExt16); | |
441 } | |
442 | |
443 return m_authFilePath; | |
444 } | |
445 | |
446 QString HgRunner::getAuthKey() | |
447 { | |
448 if (m_authKey == "") { | |
449 QByteArray key = randomKey(); | |
450 if (key == QByteArray()) { | |
451 DEBUG << "HgRunner::addExtensionOptions: Failed to get proper auth key" << endl; | |
452 return ""; | |
453 } | |
454 QString key16 = QString::fromLocal8Bit(key.toBase64()).left(16); | |
426 m_authKey = key16; | 455 m_authKey = key16; |
427 m_authFilePath = QString("%1/easyhg_%2.dat").arg(path).arg(fileExt16); | 456 } |
428 } | 457 |
429 | 458 return m_authKey; |
430 params.push_front(QString("easyhg.authkey=%1").arg(m_authKey)); | 459 } |
431 params.push_front("--config"); | 460 |
432 | 461 QStringList HgRunner::addExtensionOptions(QStringList params) |
433 params.push_front(QString("easyhg.authfile=%1").arg(m_authFilePath)); | 462 { |
434 params.push_front("--config"); | 463 QString extpath = getExtensionLocation(); |
464 if (extpath == "") { | |
465 DEBUG << "HgRunner::addExtensionOptions: Failed to get extension location" << endl; | |
466 return params; | |
467 } | |
468 | |
469 QString afp = getAuthFilePath(); | |
470 QString afk = getAuthKey(); | |
471 | |
472 if (afp != "" && afk != "") { | |
473 params.push_front(QString("easyhg.authkey=%1").arg(m_authKey)); | |
474 params.push_front("--config"); | |
475 params.push_front(QString("easyhg.authfile=%1").arg(m_authFilePath)); | |
476 params.push_front("--config"); | |
477 } | |
435 | 478 |
436 // Looks like this one must be without quotes, even though the SSH | 479 // Looks like this one must be without quotes, even though the SSH |
437 // one above only works on Windows if it has quotes (at least where | 480 // one above only works on Windows if it has quotes (at least where |
438 // there is a space in the path). Odd | 481 // there is a space in the path). Odd |
439 params.push_front(QString("extensions.easyhg=%1").arg(extpath)); | 482 params.push_front(QString("extensions.easyhg=%1").arg(extpath)); |