Changeset 887 for dasscm/trunk/usr


Ignore:
Timestamp:
Jun 26, 2010, 12:03:52 AM (15 years ago)
Author:
joergs
Message:

added function for bash completion and did code cleanup

File:
1 edited

Legend:

Unmodified
Added
Removed
  • dasscm/trunk/usr/bin/dasscm

    r884 r887  
    6262    'permissions' => 'permissions',
    6363    'cleanup' => 'cleanup',
    64     'complete' => 'complete'
     64    'complete' => 'complete',
     65    'complete_path' => 'complete_path',
     66    'complete_repopath' => 'complete_repopath',
    6567);
    6668
     
    9193    'ls' => {
    9294        'desc' => [],
    93         'params' => [ "PATH" ],
     95        'params' => [ "REPOPATH" ],
    9496        'function' => \&ls
    9597    },
     
    107109    'commit' => {
    108110        'desc' => [],
    109         'params' => [ "PATH" ],
     111        'params' => [ "REPOPATH" ],
    110112        'require' => [ "WRITE" ],
    111113        'function' => \&commit
     
    151153        'function' => \&complete
    152154    },
     155    'complete_path' => {
     156        'desc' => [ "internally, used for bash completion" ],
     157        'params' => [],
     158        'function' => \&complete_path
     159    },
     160    'complete_repopath' => {
     161        'desc' => [ "internally, used for bash completion" ],
     162        'params' => [],
     163        'function' => \&complete_repopath
     164    },
    153165);
    154166
     
    196208    print "\n";
    197209    print "Available subcommands:\n";
    198     # print "   help <subcommand>\n";
    199     # print "   init\n";
    200     # print "   login <username>\n";
    201     # print "   up <path>\n";
    202     # print "   ls <path>\n";
    203     # print "   add <path>\n";
    204     # print "   commit <path>\n";
    205     # print "   revert <path>\n";
    206     # print "   diff <path>\n";
    207     # print "   status <path>\n";
    208     # print "   check\n";
    209     # print "   cleanup\n";
    210     # print "   permissions\n";
    211210    foreach my $i (sort keys(%COMMAND_DEFINITIONS)) {
    212211        print "    ", $i, " ", join( " ", get_command_possible_params($i) ), "\n";
     
    313312        }
    314313    }
     314    $DASSCM_REPO = normalize_path($DASSCM_REPO);
    315315    if ($verbose) { print "DASSCM_REPO: " . $DASSCM_REPO . "\n"; }
    316316
     
    472472    $path =~ s|/[/]*|/|g;
    473473
     474    # remove self reference path
     475    $path =~ s|/./|/|g;
     476
    474477    return $path;
    475478}
     
    490493    }
    491494
    492     # file must be readable. Only exception is, when file should be reverted
    493     if ( $command ne "revert" ) {
     495    # file must be readable.
     496    # The only exceptions are,
     497    # - if the file parameter is to be completed or
     498    # - if a file should be reverted
     499    if ( $command ne "revert" && $command !~ m/^complete/ ) {
    494500        if ( not -r $filename_prod ) {
    495501            fatalerror( $filename_prod . " is not accessable" );
     
    15191525
    15201526    my $number_arguments = @_;
    1521     my $input_command = $_[0] || "";
    1522 
    1523     print "args: $number_arguments\n";
     1527    my @input = @_;
     1528
     1529   
    15241530    if ( $number_arguments <= 1 ) {
    15251531
     1532        # complete dasscm commands
     1533        my $input = $input[0] || "";
    15261534        foreach my $i ( keys %COMMANDS ) {
    1527             #print "$i: ";
    1528             #print get_command_requires_write( $i ), " ";
    15291535            $_ = $i;
    1530             if( m/^$input_command/ ) {
     1536            if( m/^$input/ ) {
    15311537                my $command = get_command_uniform_name($i);
    1532                 print $command, " ";
    1533                 print join( ",", get_command_possible_params($i) ) ;
    1534                 #print " (", get_command_desc( $i ), ") ";
    1535                 print "\n";
     1538                print $command, "\n";
    15361539            }
    1537             #print "\n";
    15381540        }
    15391541    } else {
    1540         my $command = get_command_uniform_name($input_command);
    1541         my @params = get_command_possible_params($input_command);
    1542         print "params: ", Dumper(@params);
     1542
     1543        # complete dasscm parameter
     1544        my $command = get_command_uniform_name($input[0]);
     1545        my @params = get_command_possible_params($input[0]);
     1546        if( $verbose ) { print "params: ", Dumper(@params); }
    15431547        if( defined($params[$number_arguments-2]) && $params[$number_arguments-2] ) { 
    15441548            my $param = $params[$number_arguments-2];
    1545             print "param: $param\n";
    1546             print Dumper($param);
    1547         }
    1548     }
     1549            if( $param eq "PATH" ) {
     1550                complete_path( $input[$number_arguments-1] );
     1551            } elsif ( $param eq "REPOPATH" ) {
     1552                complete_repopath( $input[$number_arguments-1] );
     1553            } else {
     1554                print "param: $param\n";
     1555                print Dumper($param);
     1556            }
     1557        }
     1558    }
     1559}
     1560
     1561
     1562
     1563sub complete_path(@)
     1564{
     1565    check_parameter( @_, 1 );
     1566    check_env();
     1567
     1568    (
     1569        my $basename,
     1570        my $dirname_prod,
     1571        my $dirname_repo,
     1572        my $filename_prod,
     1573        my $filename_repo
     1574    ) = get_filenames( $_[0] );
     1575
     1576    my $path = $filename_prod . "*";
     1577
     1578    my @files = glob( $path );
     1579
     1580    # if only one result is available
     1581    # and this result is a directory,
     1582    # add another result entry
     1583    # (otherwise complete will stop here and continue with the next parameter)
     1584    if( $#files == 0 ) {
     1585        my $path = $files[0];
     1586        if( -d $path ) {
     1587            push( @files, $path . "/" );
     1588        }
     1589    }
     1590
     1591    if (@files) {
     1592        print join( "\n", @files );
     1593        print "\n";
     1594    }
     1595}
     1596
     1597
     1598
     1599sub complete_repopath(@)
     1600{
     1601    check_parameter( @_, 1 );
     1602    check_env();
     1603
     1604    (
     1605        my $basename,
     1606        my $dirname_prod,
     1607        my $dirname_repo,
     1608        my $filename_prod,
     1609        my $filename_repo
     1610    ) = get_filenames( $_[0] );
     1611
     1612    my $path = $filename_repo . "*";
     1613
     1614    my @files = glob( $path );
     1615
     1616    # if only one result is available
     1617    # and this result is a directory,
     1618    # add another result entry
     1619    # (otherwise complete will stop here and continue with the next parameter)
     1620    if( $#files == 0 ) {
     1621        my $path = $files[0];
     1622        if( -d $path ) {
     1623            push( @files, $path . "/" );
     1624        }
     1625    }
     1626   
     1627    if (@files) {
     1628        # remove DASSCM_REPO path again
     1629        print join( "\n", map( { s|^${DASSCM_REPO}|/|; $_} @files ) );
     1630        print "\n";
     1631    }
     1632
    15491633}
    15501634
     
    16071691    # so we can test for it later on more simply
    16081692    #
    1609 
    1610     # $_ = $command;
    1611     # if (m/^help$/i) {
    1612     #     help(@ARGV);
    1613     # } elsif (m/^login$/i) {
    1614     #     $command = "login";
    1615     #     login(@ARGV);
    1616     # } elsif (m/^init$/i) {
    1617     #     $command = "init";
    1618     #     init(@ARGV);
    1619     # } elsif (m/^ls$/i) {
    1620     #     $command = "ls";
    1621     #     ls(@ARGV);
    1622     # } elsif ( (m/^update$/i) || (m/^up$/i) ) {
    1623     #     $command = "update";
    1624     #     update(@ARGV);
    1625     # } elsif (m/^add$/i) {
    1626     #     $command = "add";
    1627     #     add(@ARGV);
    1628     # } elsif ( (m/^commit$/i) || (m/^checkin$/i) || (m/^ci$/i) ) {
    1629     #     $command = "commit";
    1630     #     commit(@ARGV);
    1631     # } elsif (m/^revert$/i) {
    1632     #     $command     = "revert";
    1633     #     $return_code = revert(@ARGV);
    1634     # } elsif (m/^blame$/i) {
    1635     #     $command = "blame";
    1636     #     blame(@ARGV);
    1637     # } elsif (m/^diff$/i) {
    1638     #     $command = "diff";
    1639     #     diff(@ARGV);
    1640     # } elsif ( (m/^status$/i) || (m/^st$/i) ) {
    1641     #     $command     = "status";
    1642     #     $return_code = status(@ARGV);
    1643     # } elsif (m/^check$/i) {
    1644     #     $command     = "check";
    1645     #     $return_code = check();
    1646     # } elsif (m/^permissions$/i) {
    1647     #     $command     = "permissions";
    1648     #     $return_code = permissions();
    1649     # } elsif (m/^cleanup$/i) {
    1650     #     $command = "cleanup";
    1651     #     cleanup();
    1652     # } elsif (m/^complete$/i) {
    1653     #     $command = "complete";
    1654     #     $return_code = complete(@ARGV);
    16551693
    16561694    if( get_command_function( $command ) ) {
Note: See TracChangeset for help on using the changeset viewer.