On Wed, 21 Jun 2000, Hans Schmid wrote:

> Hi all,
> 
> I am looking for a Tcl script to check, if files are locked by somebody
> (using strict locking)
> I modified the SelectionTest.tcl script coming with WinCVS 1.1b14 to show
> the $fileInfo(locked) files
> 
> Unfortunately the following statement seems always to return 1 (file locked)
> even on unlocked files
> 
>       cvsout "--> Locked :       " $fileInfo(locked) "\n"   --> always 1, even
> for not locked files
> 
> Is this a known bug or do I miss something obvious.
> 
> Here the script I am using:
> 
> [ script deleted ...]

Dear Hans,

I don't use WinCVS and therefore I do not understand all details of
your script I do not know the interface between WinCVS and the Tcl
scripts.  I assume that the informations about files an directories are
provided by WinCVS via 'browsit'.  Therefore I could only guess that the
misbehaviour might be a WinCVS bug.

But I wrote a similar script for TkCVS a few weeks ago, which I appended
below.  It calls the 'cvs log' command directly and catches the output in
'view_this'.

Then the output is scanned in two steps. First all filenames are stored in
'filelist'. The corresponding locked revisions are stored in the array
'locklist(...)'.

In the second step the result is formated for output.  In TkCVS the result
is displayed using a special "viewer" which opens its own window for
displaying text.  I think this could be replaced by 'cvsout' command to
make the result appear in the WinCVS console window.  The script will
also show if several revisions of a file are locked and by whom.
 
Maybe this helps you.

    Lars

-------------------------------------------------------------------
aerodata Flugmesstechnik GmbH          Email   [EMAIL PROTECTED]
Lars-Christian Schulze                 WWW     www.aerodata.de
Hermann-Blenk-Str. 36                  Voice   +49 531 2359-188
D-38108 Braunschweig                   Fax     +49 531 2359-158


---------- Extract from cvs.tcl, part of TkCVS, version 6.3 ------

proc report_locks {} {
  global cvs
  global cvscfg
  global cwd
  upvar  linenum linenum

  gen_log:log T "ENTER"

  if {! [winfo exists .viewer]} {
    viewer_setup
  } else {
    .viewer.text configure -state normal
    .viewer.text delete 1.0 end
  }
  set linenum 1

  set commandline "$cvs -d $cvscfg(cvsroot) -l log"
  gen_log:log C "$commandline"
  catch {eval "exec $commandline"} view_this

  set filelist ""
  set found "f"
  set view_lines [split $view_this "\n"]

  foreach line $view_lines {
    if {[string match "Working file: *" $line]} {
      regsub "Working file: " $line "" filename
      lappend filelist $filename
      set locklist($filename) ""
    }
    if {[string match "*locked by*" $line]} {
      lappend locklist($filename) $line
      set found "t"
    }
  }

  .viewer.text insert end "\nLocked files:\n"
  .viewer.text insert end   "--------------------\n"
  incr linenum 2

  if { $found == "t" } {
    foreach filename $filelist {
      if { [llength $locklist($filename)] > 0 } {
        .viewer.text insert end [format "\n %s:\n" $filename]
        incr linenum
        foreach rev $locklist($filename) {
          .viewer.text insert end [format "    %s\n" $rev]
          incr linenum
        }
      }
    }
  } else {
    .viewer.text insert end "\n $cwd:"
    .viewer.text insert end "\n   No files locked in and under THIS directory."
    incr linenum 2
  }

  .viewer.text configure -state disabled
  wm deiconify .viewer
  raise .viewer

  gen_log:log T "LEAVE"
}

---------------------- End of Extract -------------------------------------

Reply via email to