Eskil

Check-in [3c929eb1df]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Better interpretation of negative SVN versions
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 3c929eb1df3cb76d62e1b5f6328178df2977e701
User & Date: peter 2009-01-07 23:09:59.000
Context
2009-01-07
23:10
Test subversion revision parsing check-in: c99cfccaba user: peter tags: trunk
23:09
Better interpretation of negative SVN versions check-in: 3c929eb1df user: peter tags: trunk
23:08
Syntax fix check-in: af015a3a7b user: peter tags: trunk
Changes
Unified Diff Ignore Whitespace Patch
Changes to src/rev.tcl.
434
435
436
437
438
439
440

441
442
443
444
445
446
447
448
449
450
451
        cd $old
    }
    return $rev
}

# Return current revision of a SVN file
proc eskil::rev::SVN::GetCurrent {filename} {

    if {$filename eq ""} {
        set cmd [list exec svn info]
    } else {
        set old ""
        set dir [file dirname $filename]
        if {$dir != "."} {
            set old [pwd]
            cd $dir
            set filename [file tail $filename]
        }








>



<







434
435
436
437
438
439
440
441
442
443
444

445
446
447
448
449
450
451
        cd $old
    }
    return $rev
}

# Return current revision of a SVN file
proc eskil::rev::SVN::GetCurrent {filename} {
    set old ""
    if {$filename eq ""} {
        set cmd [list exec svn info]
    } else {

        set dir [file dirname $filename]
        if {$dir != "."} {
            set old [pwd]
            cd $dir
            set filename [file tail $filename]
        }

461
462
463
464
465
466
467






















468
469
470
471
472
473
474
    }

    if {$old != ""} {
        cd $old
    }
    return $rev
}























# Figure out RCS revision from arguments
proc eskil::rev::RCS::ParseRevs {filename revs} {
    if {$filename eq ""} {
        # RCS does not support tree versions
        return {}
    }







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
    }

    if {$old != ""} {
        cd $old
    }
    return $rev
}

# Return revision list of a SVN file
proc eskil::rev::SVN::GetRevList {filename} {
    if {$filename eq ""} {
        set cmd [list exec svn log -q -l 50]
    } else {
        set cmd [list exec svn log -q -l 50 [file nativename $filename]]
    }
    if {[catch {eval $cmd} res]} {
        # What to do here?
        set revs [list 1]
    } else {
        set lines [lsearch -all -inline -regexp [split $res \n] {^\s*r\d}]
        set revs {}
        foreach line $lines {
            if {[regexp {r(\d+)} $line -> rev]} {
                lappend revs $rev
            }
        }
    }
    return $revs
}

# Figure out RCS revision from arguments
proc eskil::rev::RCS::ParseRevs {filename revs} {
    if {$filename eq ""} {
        # RCS does not support tree versions
        return {}
    }
534
535
536
537
538
539
540



541
542












543
544
545
546
547
548
549

# Figure out SVN revision from arguments
proc eskil::rev::SVN::ParseRevs {filename revs} {
    set result {}
    foreach rev $revs {
        # A negative integer rev is a relative rev
        if {[string is integer -strict $rev] && $rev < 0} {



            set curr [eskil::rev::SVN::GetCurrent $filename]
            set rev [expr {$curr + $rev}]












        }
        lappend result $rev
    }
    return $result
}

# Figure out ClearCase revision from arguments







>
>
>
|
|
>
>
>
>
>
>
>
>
>
>
>
>







556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586

# Figure out SVN revision from arguments
proc eskil::rev::SVN::ParseRevs {filename revs} {
    set result {}
    foreach rev $revs {
        # A negative integer rev is a relative rev
        if {[string is integer -strict $rev] && $rev < 0} {
            # Save a roundtrip to the server in the case where we
            # can start from current
            if {$rev == -1} {
                set curr [eskil::rev::SVN::GetCurrent $filename]
                set rev [expr {$curr + $rev}]
            } else {
                # Get a list from the log
                if {$filename eq ""} {
                    set filename "."
                }
                set cmd [list svn log -q [file nativename $filename]]
                set revs [eskil::rev::SVN::GetRevList $filename]
                set rev [lindex $revs [expr {-$rev}]]
                if {$rev eq ""} {
                    set rev [lindex $revs end]
                }
            }
        }
        lappend result $rev
    }
    return $result
}

# Figure out ClearCase revision from arguments