# HG changeset patch
# User devi
# Date 1140450760 -7200
# Node ID d28dda8ea18faa7b2d0f9e400b0af223f1a003a4
# Parent  44973d76ba4d1937f6c8b581f310fd409f2f0d2e
1)
Изменён формат имени diff-файлов.
Теперь в имени присутствует только название сессии, время и имя файла.
2)
Можно просмотреть отдельную сессию.
Для этого нужно щёлкнуть по блоку сессии в журнале
3)
Исправлена ошибка с таблицей новых команд в последнем дне.
Раньше она просто не показывалась
4)
Запись lablog-ов теперь ведётся только для интерактивных shell'ов
Неинтерактивные работают как обычно.
diff -r 44973d76ba4d -r d28dda8ea18f l3-agent
--- a/l3-agent	Sun Feb 19 16:02:42 2006 +0200
+++ b/l3-agent	Mon Feb 20 17:52:40 2006 +0200
@@ -58,36 +58,36 @@
         for my $file (@files) {
 
             next if defined($Diffs{$file});
-            
             my %diff;
-            
-            $diff{"path"}=$path;
-            $diff{"uid"}="SET THIS";
 
-# Сейчас UID определяется из названия каталога
-# откуда берутся diff-файлы
-# Это неправильно
-#
-# ВАРИАНТ:
-# К файлам жураналам должны прилагаться ситемны файлы, 
-# мз которых и будет определяться соответствие 
-# имён пользователей их uid'ам
-#
-            $diff{"uid"} = 0 if $path =~ m@/root/@; 
-            
-            $diff{"bind_to"}="";
-            $diff{"time_range"}=-1;
-        
-            next if not $file=~m@/(D?[0-9][0-9]?[0-9]?)[^/]*?([0-9]*):([0-9]*):?([0-9]*)@;
-            $diff{"day"}=$1 || "";
-            $diff{"hour"}=$2;
-            $diff{"min"}=$3;
-            $diff{"sec"}=$4 || 0;
-            
-            $diff{"index"}=$i;
+# Старый формат имени diff-файла
+# DEPRECATED
+            if ($file=~m@/(D?[0-9][0-9]?[0-9]?)[^/]*?([0-9]*):([0-9]*):?([0-9]*)@) {
+                $diff{"day"}=$1 || "";
+                $diff{"hour"}=$2;
+                $diff{"min"}=$3;
+                $diff{"sec"}=$4 || 0;
+
+                $diff{"uid"} = 0 if $path =~ m@/root/@; 
 
             print "diff loaded: $diff{day} $diff{hour}:$diff{min}:$diff{sec}\n";
-            
+
+            }
+# Новый формат имени diff-файла
+            elsif ($file =~ m@.*/([^_]*)_([0-9]+)(.*)@) {
+                $diff{"local_session_id"} = $1;
+                $diff{"time"} = $2;
+                $diff{"filename"} = $3;
+                $diff{"filename"} =~ s@_@/@g;
+                $diff{"filename"} =~ s@//@_@g;
+
+                print "diff loaded: $diff{filename} (time=$diff{time},session=$diff{local_session_id})\n";
+            }
+            else {
+                next;
+            }
+
+# Чтение и изменение кодировки содержимого diff-файла
             local $/;
             open (F, "$file")
                 or return "Can't open file $file ($_[0]) for reading";
@@ -98,9 +98,12 @@
             }
             close(F);   
             $diff{"text"}=$text;
-            #print "$file loaded ($diff{day})\n";
 
-            #push @Diffs, \%diff;
+            $diff{"path"}=$path;
+            $diff{"bind_to"}="";
+            $diff{"time_range"}=-1;
+            $diff{"index"}=$i;
+
             $Diffs{$file} = \%diff;
             $i++;
         }
@@ -110,11 +113,6 @@
 
 sub bind_diff
 {
-#   my $path = shift;
-#   my $pid = shift;
-#   my $day = shift;
-#   my $lab = shift;
-
     print "Trying to bind diff...\n";
 
     my $cl = shift;
@@ -126,12 +124,24 @@
 
     for my $diff_key (keys %Diffs) {
             my $diff = $Diffs{$diff_key};
-            # Check here date, time and user
+            next if ($diff->{"local_session_id"} 
+                    && $cl->{"local_session_id"} 
+                    && ($cl->{"local_session_id"} ne $diff->{"local_session_id"}));
+            print "diff of my session found\n";
+
             next if ($diff->{"day"} && $cl->{"day"} && ($cl->{"day"} ne $diff->{"day"}));
-            #next if (!$diff->{"uid"} && $cl->{"euid"} != $diff->{"uid"});
-            
-            my $dt=($diff->{"hour"}-$hour)*3600 +($diff->{"min"}-$min)*60 + ($diff->{"sec"}-$sec);
-            if ($dt >0  && $dt < $min_dt && ($diff->{"time_range"} <0 || $dt < $diff->{"time_range"})) {
+
+            my $dt;
+            if ($diff->{"time"} && $cl->{"time"}) {
+                $dt = $diff->{"time"} - $cl->{"time"}
+            }
+            else {
+                $dt=($diff->{"hour"}-$hour)*3600 +($diff->{"min"}-$min)*60 + ($diff->{"sec"}-$sec);
+            }
+            if ($dt >0  
+                    && $dt < $min_dt 
+                    && ($diff->{"time_range"} <0 
+                    || $dt < $diff->{"time_range"})) {
                 print "Approppriate diff found: dt=$dt\n";
                 if ($diff->{"bind_to"}) {
                     undef $diff->{"bind_to"}->{"diff"};
@@ -141,7 +151,7 @@
 
                 $cl->{"diff"} = $diff_key;
                 $min_dt = $dt;  
-        }
+            }
     }
 }
 
@@ -281,7 +291,7 @@
 
         $file =~ m@.*/(.*?)-.*@;
 
-        print "+- processing file $file\n" if $Config{"verbose"} =~/y/;
+        print "\n+- processing file $file\n" if $Config{"verbose"} =~/y/;
 
         my $tty = $1;
         my $first_pass = 1;
diff -r 44973d76ba4d -r d28dda8ea18f l3-cgi
--- a/l3-cgi	Sun Feb 19 16:02:42 2006 +0200
+++ b/l3-cgi	Mon Feb 20 17:52:40 2006 +0200
@@ -13,7 +13,7 @@
 
 my %filter;
 
-for my $key (qw(login_from)) {
+for my $key (qw(login_from local_session_id)) {
 	$filter{$key} =  param($key) if param($key);
 	$filter{$key} = $ENV{$key} if defined $ENV{$key};
 }
diff -r 44973d76ba4d -r d28dda8ea18f l3-frontend
--- a/l3-frontend	Sun Feb 19 16:02:42 2006 +0200
+++ b/l3-frontend	Mon Feb 20 17:52:40 2006 +0200
@@ -394,6 +394,7 @@
     
     my $cl;
     my $last_tty="";
+    my $last_session="";
     my $last_day=q();
     my $last_wday=q();
     my $in_range=0;
@@ -565,11 +566,20 @@
                 for my $entry_class (sort keys %new_entries_of) {
                     my $new_commands_section = make_new_entries_table($entry_class=~/[0-9]+\s+(.*)/, \@known_commands);
 
-                    my $table_caption = "Таблица ".$table_number++.". ".$Day_Name[$last_wday].". Новые ".$new_entries_of{$entry_class};
+                    my $table_caption = "Таблица "
+                                      . $table_number++
+                                      . ". "
+                                      . $Day_Name[$last_wday]
+                                      . ". Новые "
+                                      . $new_entries_of{$entry_class};
                     if ($new_commands_section) {
                         $result .= "
"
-                                .  "| $table_caption | 
"
-                                .  "| Команда | Описание | 
"
+                                .  ""
+                                .  "| $table_caption"
+                                .  " | 
"
+                                .  ""
+                                .  "| Команда | Описание"
+                                .  " | 
"
                                 .  $new_commands_section 
                                 .  "
"
                     }
@@ -637,6 +647,15 @@
             $last_tty=$cl->{"tty"};
         }
 
+# Session change
+        if ( $last_session ne $cl->{"local_session_id"}) {
+            my $tty = $cl->{"tty"};
+            $this_day_result .= ""
+                                . $Sessions{$cl->{"local_session_id"}}->{"tty"}
+                                ."
";
+            $last_session=$cl->{"local_session_id"};
+        }
+
 # TIME
         $this_day_result .= "$hour:$min:$sec
" 
                             if $Config{"show_time"} =~ /^y/i;
@@ -725,24 +744,29 @@
         $result .= "".$Day_Name[$last_wday]."
";
 
         for my $entry_class (keys %new_entries_of) {
-            my $new_commands_section = make_new_entries_table("$entry_class", \@known_commands);
-            @known_commands = keys %CommandsFDistribution;
-
-            my $table_caption = "Таблица ".$table_number++.". Новые ".$new_entries_of{$entry_class}. ". ".$Day_Name[$last_wday];
+            my $new_commands_section = make_new_entries_table($entry_class=~/[0-9]+\s+(.*)/, \@known_commands);
+            my $table_caption = "Таблица "
+                                . $table_number++
+                                . ". "
+                                . $Day_Name[$last_wday]
+                                . ". Новые "
+                                . $new_entries_of{$entry_class};
             if ($new_commands_section) {
-                $result .= ""
-                        .  "| $table_caption | 
"
-                        .  "| Команда | Описание | 
"
+                $result .= ""
+                        .  ""
+                        .  "| $table_caption"
+                        .  " | 
"
+                        .  ""
+                        .  "| Команда | Описание"
+                        .  " | 
"
                         .  $new_commands_section 
                         .  "
"
-                        ;
             }
 
         }
+        @known_commands = keys %CommandsFDistribution;
 
-        #$result .= "\n";
         $result .= $this_day_result;
-        #$result .= "
";
    }
 
     return ($result, collapse_list (\@toc));
diff -r 44973d76ba4d -r d28dda8ea18f l3bashrc
--- a/l3bashrc	Sun Feb 19 16:02:42 2006 +0200
+++ b/l3bashrc	Mon Feb 20 17:52:40 2006 +0200
@@ -17,6 +17,7 @@
 
 _l3_start()
 {
+    echo $- | grep -q i || return 0
     if _l3_is_running_here
     then
         _l3_env
@@ -145,12 +146,15 @@
                 TIME=\"\`date +%s\`\"
                 DIR=\"\"
                 [ \"\${1#/}\" = \"\$1\" ] && DIR=\"\$PWD/\"
-                DIFFNAME=\"\$PPID_\${TIME}_\`echo \$DIR\$1| /bin/sed s@_@__@ | /bin/sed 's@/@_@g'\`.diff\"
+                DIFFNAME=\"\${L3_SESSION_ID}_\${TIME}\`echo \$DIR\$1| sed s@_@__@ | sed 's@/@_@g'\`.diff\"
                 old_file=\"/tmp/l3-saved-\$\$.\$RANDOM.\$RANDOM\"
                 /bin/cp -- \"\$1\" \"\$old_file\" 2> /dev/null
                 $editor_file \"\$@\" || ERR=\$?
-                [ -e \"\$old_file\" ] && diff \"\$old_file\" \"\$1\" > \"\$L3_HOME/\$DIFFNAME\" 2> /dev/null \
-                                  || diff /dev/null \"\$1\"  > \"\$L3_HOME/\$DIFFNAME\" 2> /dev/null
+                [ -e \"\$old_file\" ] && diff \"\$old_file\" \"\$1\" > \"\$L3_HOME/\$DIFFNAME\" 2> /dev/null
+                if [ "$?" == 2 ] 
+                then 
+                    diff /dev/null \"\$1\"  > \"\$L3_HOME/\$DIFFNAME\" 2> /dev/null
+                fi
                 /bin/rm \"\$old_file\" 2> /dev/null
                 return \$ERR
             fi