Index: src/TortoiseProc/Commands/LogCommand.cpp
===================================================================
--- src/TortoiseProc/Commands/LogCommand.cpp	(revision 29521)
+++ src/TortoiseProc/Commands/LogCommand.cpp	(working copy)
@@ -19,7 +19,9 @@
 #include "stdafx.h"
 #include "LogCommand.h"
 #include "LogDialog/LogDlg.h"
+#include "RevisionDlg.h"
 #include "StringUtils.h"
+#include "SVN.h"
 #include "TortoiseProc.h"
 
 bool LogCommand::Execute()
@@ -54,6 +56,36 @@
     if (!revEnd.IsValid())
         revEnd = 0;
 
+    CTSVNPath path = cmdLinePath;
+    if (parser.HasKey(L"reporev"))
+    {
+        // show log of the repo's root directory at a specific revision
+        // if no revision is specified, ask the user to enter one
+        if (parser.HasVal(L"reporev"))
+        {
+            val = parser.GetVal(L"reporev");
+            revStart = SVNRev(val);
+        }
+        else
+        {
+            CRevisionDlg dlg;
+            dlg.AllowWCRevs(false);
+
+            if (dlg.DoModal() != IDOK)
+                return false;
+
+            val = dlg.GetEnteredRevisionString();
+            revStart = SVNRev(val);
+        }
+        pegRev = revStart;
+        revEnd = 0;
+
+        // ignore the specific file(s) / folder(s), but use them to get the repo's root URL
+        SVN svn;
+        CString root = svn.GetRepositoryRoot(cmdLinePath);
+        path.SetFromSVN(root);
+    }
+
     if (limit == 0)
     {
         CRegDWORD reg = CRegDWORD(L"Software\\TortoiseSVN\\NumberOfLogs", 100);
@@ -80,7 +112,7 @@
 
     CLogDlg dlg;
     theApp.m_pMainWnd = &dlg;
-    dlg.SetParams(cmdLinePath, pegRev, revStart, revEnd, bStrict, TRUE, limit);
+    dlg.SetParams(path, pegRev, revStart, revEnd, bStrict, TRUE, limit);
     dlg.SetFilter(findStr, findType, findRegex, sFilterDateFrom, sFilterDateTo);
     dlg.SetIncludeMerge(!!parser.HasKey(L"merge"));
     val = parser.GetVal(L"propspath");
Index: src/TortoiseShell/ContextMenu.cpp
===================================================================
--- src/TortoiseShell/ContextMenu.cpp	(revision 29521)
+++ src/TortoiseShell/ContextMenu.cpp	(working copy)
@@ -94,6 +94,9 @@
     { ShellMenuRevisionGraph,               TSVNContextMenuEntries::Revisiongraph,  IDI_REVISIONGRAPH,      IDS_MENUREVISIONGRAPH,      IDS_MENUDESCREVISIONGRAPH,
         {ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_revisiongraph"},
 
+    { ShellMenuLogExt,                      TSVNContextMenuEntries::Logext,         IDI_LOG,                IDS_MENULOGEXT,             IDS_MENUDESCLOGEXT,
+        {ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_ADDEDWITHHISTORY|ITEMIS_ONLYONE, ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, L"tsvn_logext" },
+
     { ShellSeparator, TSVNContextMenuEntries::None, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}, L""},
 
     { ShellMenuConflictEditor,              TSVNContextMenuEntries::Conflicteditor, IDI_CONFLICT,           IDS_MENUCONFLICT,           IDS_MENUDESCCONFLICT,
@@ -1621,6 +1624,10 @@
         case ShellMenuLog:
             AddPathCommand(svnCmd, L"log", true, paths, folder);
             break;
+        case ShellMenuLogExt:
+            AddPathCommand(svnCmd, L"log", true, paths, folder);
+            svnCmd += L" /reporev";
+            break;
         case ShellMenuConflictEditor:
             AddPathCommand(svnCmd, L"conflicteditor", true, paths, folder);
             break;
Index: src/TortoiseShell/Globals.h
===================================================================
--- src/TortoiseShell/Globals.h	(revision 29521)
+++ src/TortoiseShell/Globals.h	(working copy)
@@ -64,6 +64,7 @@
     Copyurl        = 0x0000008000000000,
     Shelve         = 0x0000010000000000,
     Unshelve       = 0x0000020000000000,
+    Logext         = 0x0000040000000000,
 
     Settings = 0x2000000000000000,
     Help     = 0x4000000000000000,
@@ -147,6 +148,7 @@
     {TSVNContextMenuEntries::Copyurl, IDS_MENUCOPYURL, IDI_COPYURL},
     {TSVNContextMenuEntries::Shelve, IDS_MENUSHELVE, IDI_SHELVE},
     {TSVNContextMenuEntries::Unshelve, IDS_MENUUNSHELVE, IDI_UNSHELVE},
+    {TSVNContextMenuEntries::Logext, IDS_MENULOGEXT, IDI_LOG},
 
     {TSVNContextMenuEntries::Settings, IDS_MENUSETTINGS, IDI_SETTINGS},
     {TSVNContextMenuEntries::Help, IDS_MENUHELP, IDI_HELP},
Index: src/TortoiseShell/resource.h
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: src/TortoiseShell/resource.rc
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: src/TortoiseShell/ShellExt.h
===================================================================
--- src/TortoiseShell/ShellExt.h	(revision 29521)
+++ src/TortoiseShell/ShellExt.h	(working copy)
@@ -159,6 +159,7 @@
         ShellMenuDelUnversioned,
         ShellMenuClipPaste,
         ShellMenuUpgradeWC,
+        ShellMenuLogExt,
         ShellMenuLastEntry // used to mark the menu array end
     };
 
