inherit COMMAND_BASE; #define CLONER "/global/player/cloner" /** @ignore yes */ int do_list( string file ) { string *files, change; mapping changes; if( file && file != "") files = TP->get_files(file); changes = CLONER->query_changes(); foreach( change in sort_array( keys(changes), 1 ) ) { if( files && member_array( change, files ) == -1 && strsrch( change, file ) == -1 ) continue; printf("%s:\n %s until %s\n", change, changes[change][0], ctime(changes[change][1]) ); } return 1; } /* do_list() */ /** @ignore yes */ int do_move(string source, string dest) { string *sources, *tmp, destp; seteuid( geteuid(TP) ); if( !sizeof( sources = TP->get_files(source) ) ) return notify_fail("No source files found.\n"); if( !dir_exists( destp = TP->get_path(dest) ) ) return notify_fail("Destination must be a directory.\n"); foreach( source in sources ) { tmp = explode( source, "/"); dest = destp+"/"+tmp[<1]; if( rename( source, dest ) ) return notify_fail("Error renaming ["+source+"] to ["+dest+"]\n"); CLONER->add_mapping( source, dest ); } return 1; } /* do_move() */ /** @ignore yes */ int do_add( string source, string dest ) { // Get rid of the .c extensions. if( source[<2..] == ".c") source = source[<2..]; if( dest[<2..] == ".c") dest = dest[<2..]; CLONER->add_mapping( source, dest ); return 1; } /* do_add() */ /** @ignore yes */ int do_remove( string source ) { CLONER->remove_mapping(source); return 1; } /* do_remove() */ /** @ignore yes */ mixed *query_patterns() { return ({ "list", (: do_list(0) :), "list <word'file'>", (: do_list( $4[0] ) :), "move <word'source'> <word'dest'>", (: do_move( $4[0], $4[1] ) :), "add <word'source'> <word'dest'>", (: do_add( $4[0], $4[1] ) :), "remove <word'source'>", (: do_remove( $4[0] ) :), }); } /* query_patterns() */