{"thread":{"id":"21680","subject":"[PATCH v2] gitk: Honor TMPDIR when viewing diffs externally","startedAt":"2009-11-20T01:27:02Z","lastAt":"2009-12-30T07:45:20Z","messageCount":3,"participants":["David Aguilar","Nanako Shiraishi","Junio C Hamano"],"isPatch":true,"patchVersion":2,"patchTotal":null},"messages":[{"id":"127950","messageId":"1258680422-42179-1-git-send-email-davvid@gmail.com","threadId":"21680","inReplyTo":null,"subject":"[PATCH v2] gitk: Honor TMPDIR when viewing diffs externally","fromName":"David Aguilar","fromEmail":"davvid@gmail.com","sentAt":"2009-11-20T01:27:02Z","receivedAt":"2009-11-20T01:27:02Z","isPatch":true,"sender":{"key":"davvid@gmail.com","avatar":"https://avatars.githubusercontent.com/u/13196?v=4"},"body":"gitk's external diff fails when browsing read-only repositories.\nThis is due to gitk's assumption that the current directory is\nalways writable.  By honoring TMPDIR we avoid this problem and\nallow users to define the location used for temporary files.\n\nSigned-off-by: David Aguilar <davvid@gmail.com>\n---\n\nThis version of the patch is more careful to ensure that\nthe temporary files and directories created by gitk are not\neasily predictable.\n\n gitk |   29 ++++++++++++++++++-----------\n 1 files changed, 18 insertions(+), 11 deletions(-)\n\ndiff --git a/gitk b/gitk\nindex 364c7a8..84ea8a9 100755\n--- a/gitk\n+++ b/gitk\n@@ -3292,17 +3292,21 @@ proc flist_hl {only} {\n     set gdttype [mc \"touching paths:\"]\n }\n \n+proc randstr {} {\n+    global initial_rand\n+    return [format \"%f\" [expr rand() + $initial_rand]]\n+}\n+\n proc gitknewtmpdir {} {\n-    global diffnum gitktmpdir gitdir\n+    global diffnum gitktmpdir gitdir env\n \n     if {![info exists gitktmpdir]} {\n-\tset gitktmpdir [file join [file dirname $gitdir] \\\n-\t\t\t    [format \".gitk-tmp.%s\" [pid]]]\n-\tif {[catch {file mkdir $gitktmpdir} err]} {\n-\t    error_popup \"[mc \"Error creating temporary directory %s:\" $gitktmpdir] $err\"\n-\t    unset gitktmpdir\n-\t    return {}\n+\tif {[info exists env(TMPDIR)]} {\n+\t    set tmpdir $env(TMPDIR)\n+\t} else {\n+\t    set tmpdir [file dirname $gitdir]\n \t}\n+\tset gitktmpdir [file join $tmpdir \".gitk-tmp.[pid].[randstr]\"]\n \tset diffnum 0\n     }\n     incr diffnum\n@@ -3339,10 +3343,12 @@ proc external_diff_get_one_file {diffid filename diffdir} {\n \treturn $nullfile\n     }\n     if {$diffid == $nullid2} {\n-        set difffile [file join $diffdir \"\\[index\\] [file tail $filename]\"]\n+        set difffile [file join $diffdir \\\n+\t       \"\\[index-[randstr]\\] [file tail $filename]\"]\n         return [save_file_from_commit :$filename $difffile index]\n     }\n-    set difffile [file join $diffdir \"\\[$diffid\\] [file tail $filename]\"]\n+    set difffile [file join $diffdir \\\n+\t       \"\\[$diffid-[randstr]\\] [file tail $filename]\"]\n     return [save_file_from_commit $diffid:$filename $difffile \\\n \t       \"revision $diffid\"]\n }\n@@ -8525,8 +8531,8 @@ proc diffcommits {a b} {\n     global diffcontext diffids blobdifffd diffinhdr\n \n     set tmpdir [gitknewtmpdir]\n-    set fna [file join $tmpdir \"commit-[string range $a 0 7]\"]\n-    set fnb [file join $tmpdir \"commit-[string range $b 0 7]\"]\n+    set fna [file join $tmpdir \"commit-[string range $a 0 7]-[randstr]\"]\n+    set fnb [file join $tmpdir \"commit-[string range $b 0 7]-[randstr]\"]\n     if {[catch {\n \texec git diff-tree -p --pretty $a >$fna\n \texec git diff-tree -p --pretty $b >$fnb\n@@ -11321,6 +11327,7 @@ if {[tk windowingsystem] eq \"aqua\"} {\n     set textfont {Courier 9}\n     set uifont {Helvetica 9 bold}\n }\n+set initial_rand [expr srand([clock scan now])]\n set tabstop 8\n set findmergefiles 0\n set maxgraphpct 50\n-- \n1.6.5.3.171.ge36e\n"},{"id":"130509","messageId":"20091230121314.6117@nanako3.lavabit.com","threadId":"21680","inReplyTo":"1258680422-42179-1-git-send-email-davvid@gmail.com","subject":"Re: [PATCH v2] gitk: Honor TMPDIR when viewing diffs externally","fromName":"Nanako Shiraishi","fromEmail":"nanako3@lavabit.com","sentAt":"2009-12-30T03:13:14Z","receivedAt":"2009-12-30T03:13:14Z","isPatch":true,"sender":{"key":"nanako3@lavabit.com","avatar":"https://gravatar.com/avatar/3777b9e201c5883a62b1a6fdf7c53f2d712d1d80989146063ea861e33aad72a8?d=mp&s=160"},"body":"Junio, could you tell us what happened to this thread?\n\nA patch to help running diff command from gitk in a read-only place.\n"},{"id":"130522","messageId":"7v3a2s6h2n.fsf@alter.siamese.dyndns.org","threadId":"21680","inReplyTo":"20091230121314.6117@nanako3.lavabit.com","subject":"Re: [PATCH v2] gitk: Honor TMPDIR when viewing diffs externally","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2009-12-30T07:45:20Z","receivedAt":"2009-12-30T07:45:20Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"If my recollection is correct, I think this approach was scrapped in favor\nof using difftool to dispatch the external diff viewers.\n"}]}