Mercurial > hg > easyhg
comparison mainwindow.cpp @ 353:93feb59187f5 feature_104
Add a dedicated dialog for "authorization failed" messages. Resolves #104
author | Chris Cannam |
---|---|
date | Thu, 17 Mar 2011 12:51:10 +0000 |
parents | 383223b1dd34 |
children | 368b96a87c43 |
comparison
equal
deleted
inserted
replaced
352:383223b1dd34 | 353:93feb59187f5 |
---|---|
1720 tr("Your local repository could not be pushed to the remote repository.<br><br>The remote repository may have been changed by someone else since you last pushed. Try pulling and merging their changes into your local repository first."), | 1720 tr("Your local repository could not be pushed to the remote repository.<br><br>The remote repository may have been changed by someone else since you last pushed. Try pulling and merging their changes into your local repository first."), |
1721 output); | 1721 output); |
1722 } | 1722 } |
1723 } | 1723 } |
1724 | 1724 |
1725 void MainWindow::reportAuthFailed(QString output) | |
1726 { | |
1727 MoreInformationDialog::warning | |
1728 (this, | |
1729 tr("Authorization failed"), | |
1730 tr("Authorization failed"), | |
1731 tr("You may have entered an incorrect user name or password, or the remote URL may be wrong.<br><br>Or you may lack the necessary permissions on the remote repository.<br><br>Check with the administrator of your remote repository if necessary."), | |
1732 output); | |
1733 } | |
1734 | |
1725 void MainWindow::commandStarting(HgAction action) | 1735 void MainWindow::commandStarting(HgAction action) |
1726 { | 1736 { |
1727 // Annoyingly, hg stat actually modifies the working directory -- | 1737 // Annoyingly, hg stat actually modifies the working directory -- |
1728 // it creates files called hg-checklink and hg-checkexec to test | 1738 // it creates files called hg-checklink and hg-checkexec to test |
1729 // properties of the filesystem. For safety's sake, suspend the | 1739 // properties of the filesystem. For safety's sake, suspend the |
1745 setstr = tr("Preferences"); | 1755 setstr = tr("Preferences"); |
1746 #else | 1756 #else |
1747 setstr = tr("Settings"); | 1757 setstr = tr("Settings"); |
1748 #endif | 1758 #endif |
1749 | 1759 |
1750 // Some commands we just have to ignore bad return values from: | 1760 // Some commands we just have to ignore bad return values from, |
1761 // and some output gets special treatment. | |
1762 | |
1763 // Note our fallback case should always be to report a | |
1764 // non-specific error and show the text -- in case output scraping | |
1765 // fails (as it surely will). Note also that we must force the | |
1766 // locale in order to ensure the output is scrapable; this happens | |
1767 // in HgRunner and may break some system encodings. | |
1751 | 1768 |
1752 switch(action.action) { | 1769 switch(action.action) { |
1753 case ACT_NONE: | 1770 case ACT_NONE: |
1754 // uh huh | 1771 // uh huh |
1755 return; | 1772 return; |
1775 // if clone fails, we have no repo | 1792 // if clone fails, we have no repo |
1776 m_workFolderPath = ""; | 1793 m_workFolderPath = ""; |
1777 enableDisableActions(); | 1794 enableDisableActions(); |
1778 break; // go on to default report | 1795 break; // go on to default report |
1779 case ACT_INCOMING: | 1796 case ACT_INCOMING: |
1780 // returns non-zero code and no output if the check was | 1797 if (output.contains("authorization failed")) { |
1781 // successful but there are no changes pending | 1798 reportAuthFailed(output); |
1782 { | 1799 return; |
1800 } else { | |
1801 // Incoming returns non-zero code and no output if the | |
1802 // check was successful but there are no changes | |
1803 // pending. This is the only case where we need to remove | |
1804 // warning messages, because it's the only case where a | |
1805 // non-zero code can be returned even though the command | |
1806 // has for our purposes succeeded | |
1783 QString replaced = output; | 1807 QString replaced = output; |
1784 while (1) { | 1808 while (1) { |
1785 QString r1 = replaced; | 1809 QString r1 = replaced; |
1786 r1.replace(QRegExp("warning: [^\\n]*"), ""); | 1810 r1.replace(QRegExp("warning: [^\\n]*"), ""); |
1787 if (r1 == replaced) break; | 1811 if (r1 == replaced) break; |
1788 replaced = r1.trimmed(); | 1812 replaced = r1.trimmed(); |
1789 } | 1813 } |
1790 // DEBUG << "incoming: text is " << output << endl; | |
1791 // DEBUG << "replaced is " << replaced << endl; | |
1792 if (replaced == "") { | 1814 if (replaced == "") { |
1793 showIncoming(""); | 1815 showIncoming(""); |
1794 return; | 1816 return; |
1795 } | 1817 } |
1818 } | |
1819 break; // go on to default report | |
1820 case ACT_PULL: | |
1821 if (output.contains("authorization failed")) { | |
1822 reportAuthFailed(output); | |
1823 return; | |
1824 } | |
1825 break; // go on to default report | |
1826 case ACT_PUSH: | |
1827 if (output.contains("creates new remote heads")) { | |
1828 reportNewRemoteHeads(output); | |
1829 return; | |
1830 } else if (output.contains("authorization failed")) { | |
1831 reportAuthFailed(output); | |
1832 return; | |
1796 } | 1833 } |
1797 break; // go on to default report | 1834 break; // go on to default report |
1798 case ACT_QUERY_HEADS: | 1835 case ACT_QUERY_HEADS: |
1799 // fails if repo is empty; we don't care (if there's a genuine | 1836 // fails if repo is empty; we don't care (if there's a genuine |
1800 // problem, something else will fail too). Pretend it | 1837 // problem, something else will fail too). Pretend it |
1806 case ACT_CHGSETDIFF: | 1843 case ACT_CHGSETDIFF: |
1807 // external program, unlikely to be anything useful in stderr | 1844 // external program, unlikely to be anything useful in stderr |
1808 // and some return with failure codes when something as basic | 1845 // and some return with failure codes when something as basic |
1809 // as the user closing the window via the wm happens | 1846 // as the user closing the window via the wm happens |
1810 return; | 1847 return; |
1811 case ACT_PUSH: | |
1812 if (output.contains("creates new remote heads")) { | |
1813 reportNewRemoteHeads(output); | |
1814 return; | |
1815 } | |
1816 break; // go on to default report | |
1817 case ACT_MERGE: | 1848 case ACT_MERGE: |
1818 case ACT_RETRY_MERGE: | 1849 case ACT_RETRY_MERGE: |
1819 MoreInformationDialog::information | 1850 MoreInformationDialog::information |
1820 (this, tr("Merge"), tr("Merge failed"), | 1851 (this, tr("Merge"), tr("Merge failed"), |
1821 tr("Some files were not merged successfully.<p>You can Merge again to repeat the interactive merge; use Revert to abandon the merge entirely; or edit the files that are in conflict in an editor and, when you are happy with them, choose Mark Resolved in each file's right-button menu."), | 1852 tr("Some files were not merged successfully.<p>You can Merge again to repeat the interactive merge; use Revert to abandon the merge entirely; or edit the files that are in conflict in an editor and, when you are happy with them, choose Mark Resolved in each file's right-button menu."), |