{"thread":{"id":"47552","subject":"-C options do not work for code evaluation","startedAt":"2018-01-06T11:52:03Z","lastAt":"2018-01-06T11:52:03Z","messageCount":1,"participants":["KES"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"336047","messageId":"654491515239062@web58g.yandex.ru","threadId":"47552","inReplyTo":null,"subject":"-C options do not work for code evaluation","fromName":"KES","fromEmail":"kes-kes@yandex.ru","sentAt":"2018-01-06T11:44:22Z","receivedAt":"2018-01-06T11:52:03Z","isPatch":false,"sender":{"key":"kes-kes@yandex.ru","avatar":null},"body":"Hi.\n\nI run this command:\n\ngit log --graph --decorate --pretty=oneline --abbrev-commit --color-moved -C -L 534,545:lib/DB/Hooks.pm\n\nat some point of evalutation I see:\n\nhttp://joxi.net/Y2L4GQ0in480l2\n\n* e348241 Wrap whole DB::DB into &dbcall by moving DB::db into DB::interact\n| \n| diff --git a/lib/DB/Hooks.pm b/lib/DB/Hooks.pm\n| --- a/lib/DB/Hooks.pm\n| +++ b/lib/DB/Hooks.pm\n| @@ -528,5 +528,12 @@\n| -  dbcall \\&emit, 'btrap', $source, $f, $l;\n| -  dbcall \\&emit, 'interact';\n| -  dbcall \\&emit, 'atrap';\n| +sub db {\n| +  my $dd =  DB::new   if DB::state( 'dbcall' );\n| +  DB::start_dd   if $DB::DB  ||  DB::state( 'dbcall' );\n| +  local $DB::DB =  1;\n| +\n| +  &save_context;\n| +  my $dbg =  DB::new \\&restore_context;\n| +\n| +  my( undef, $f, $l ) =  caller(1);\n| +  dbcall \\&interact, $f, $l;\n|  }\n|  \n\n\nWhen I look at commit e348241 I can see that code is moved:\nhttp://joxi.net/eAOMjW1I4W7LBm\n\ncommit e348241bfb9ba563c82d28c05d3f45ab9c1a765d\nAuthor: Eugen Konkov <kes-kes@yandex.ru>\nDate:   Fri Jan 5 15:58:17 2018 +0200\n\n    Wrap whole DB::DB into &dbcall by moving DB::db into DB::interact\n    \n    This allow us to not wrap each &emit call into &dbcall\n\ndiff --git a/lib/DB/Hooks.pm b/lib/DB/Hooks.pm\nindex 6ade20a..dabe701 100644\n--- a/lib/DB/Hooks.pm\n+++ b/lib/DB/Hooks.pm\n@@ -490,23 +490,16 @@ sub goto {\n }\n \n \n-sub db {\n-    my $dd =  DB::new   if DB::state( 'dbcall' );\n-    DB::start_dd   if $DB::DB  ||  DB::state( 'dbcall' );\n-    local $DB::DB =  1;\n \n-    &save_context;\n-    my $dbg =  DB::new \\&restore_context;\n-\n-\n-    my( undef, $f, $l ) =  caller(1);\n+sub interact {\n+    my( $f, $l ) =  @_;\n \n     my $source =  DB::source( $f )->[ $l ]; chomp $source;\n-    dbcall \\&emit, 'trace', $source, $f, $l   if $DB::trace;\n+    emit( 'trace', $source, $f, $l )   if $DB::trace;\n ... #<<<<I remove part of patch to minify text\n@@ -525,9 +518,23 @@ sub db {\n \n \n \n-    dbcall \\&emit, 'btrap', $source, $f, $l;\n-    dbcall \\&emit, 'interact';\n-    dbcall \\&emit, 'atrap';\n+    emit( 'btrap', $source, $f, $l );\n+    emit( 'interact' );\n+    emit( 'atrap' );\n+}\n+\n+\n+\n+sub db {\n+    my $dd =  DB::new   if DB::state( 'dbcall' );\n+    DB::start_dd   if $DB::DB  ||  DB::state( 'dbcall' );\n+    local $DB::DB =  1;\n+\n+    &save_context;\n+    my $dbg =  DB::new \\&restore_context;\n+\n+    my( undef, $f, $l ) =  caller(1);\n+    dbcall \\&interact, $f, $l;\n }\n \n\n\nTo workaround this problem I run:\ngit log --graph --decorate --pretty=oneline --abbrev-commit --color-moved -C -L 492,505:lib/DB/Hooks.pm e348241b\nhttp://joxi.ru/vAWMwOZIkNy7Rm\n* e348241 Wrap whole DB::DB into &dbcall by moving DB::db into DB::interact\n| \n| diff --git a/lib/DB/Hooks.pm b/lib/DB/Hooks.pm\n| --- a/lib/DB/Hooks.pm\n| +++ b/lib/DB/Hooks.pm\n| @@ -492,21 +492,14 @@\n|  \n| -sub db {\n| -  my $dd =  DB::new   if DB::state( 'dbcall' );\n| -  DB::start_dd   if $DB::DB  ||  DB::state( 'dbcall' );\n| -  local $DB::DB =  1;\n|  \n| -  &save_context;\n| -  my $dbg =  DB::new \\&restore_context;\n| -\n| -\n| -  my( undef, $f, $l ) =  caller(1);\n| +sub interact {\n| +  my( $f, $l ) =  @_;\n|  \n|    my $source =  DB::source( $f )->[ $l ]; chomp $source;\n| -  dbcall \\&emit, 'trace', $source, $f, $l   if $DB::trace;\n| +  emit( 'trace', $source, $f, $l )   if $DB::trace;\n|  \n|    my @trap;\n|    if( my $info =  DB::traps( $f )->{ $l } ) {\n| -      @trap =  dbcall \\&emit, 'trap', $info, $f, $l;\n| +      @trap =  emit( 'trap', $info, $f, $l );\n|        # Stop unconditionally if there is no subscribers for the event\n|        @trap =  (1)   unless @trap;\n|    }\n* 30c07c0 If we come from { dbcall } start debugger debugging too\n| \n| diff --git a/lib/DB/Hooks.pm b/lib/DB/Hooks.pm\n| --- a/lib/DB/Hooks.pm\n| +++ b/lib/DB/Hooks.pm\n| @@ -489,20 +489,21 @@\n|  \n|  sub db {\n| -  DB::start_dd   if $DB::DB;\n| +  my $dd =  DB::new   if DB::state( 'dbcall' );\n| +  DB::start_dd   if $DB::DB  ||  DB::state( 'dbcall' );\n|    local $DB::DB =  1;\n|  \n|    &save_context;\n|    my $dbg =  DB::new \\&restore_context;\n|  \n|  \n|    my( undef, $f, $l ) =  caller(1);\n|  \n|    my $source =  DB::source( $f )->[ $l ]; chomp $source;\n|    dbcall \\&emit, 'trace', $source, $f, $l   if $DB::trace;\n|  \n|    my @trap;\n|    if( my $info =  DB::traps( $f )->{ $l } ) {\n|        @trap =  dbcall \\&emit, 'trap', $info, $f, $l;\n|        # Stop unconditionally if there is no subscribers for the event\n|        @trap =  (1)   unless @trap;\n|    }\n\n\n1. In the example above moved code is not displayed as moved. It seems the whole \nchangeset (commit) is not inspected despite on the `-C` option is supplied\n\n2. Please provide an option which will allow to follow moved code (maybe this should be done by default,\nbecause 71% (77%) of code in interested block is moved and not changed)\n\n| @@ -528,5 +528,12 @@\n| -  dbcall \\&emit, 'btrap', $source, $f, $l;\n| -  dbcall \\&emit, 'interact';\n| -  dbcall \\&emit, 'atrap';\n| +sub db {\n| +  my $dd =  DB::new   if DB::state( 'dbcall' );\n| +  DB::start_dd   if $DB::DB  ||  DB::state( 'dbcall' );\n| +  local $DB::DB =  1;\n| +\n| +  &save_context;\n| +  my $dbg =  DB::new \\&restore_context;\n| +\n| +  my( undef, $f, $l ) =  caller(1);\n| +  dbcall \\&interact, $f, $l;\n|  }\n\nMaybe supply interactive mode which will suggest where to follow\n\nThank you\n"}]}