diff --git a/Makefile.in b/Makefile.in index 7461b6f1f..9320c8cee 100644 --- a/Makefile.in +++ b/Makefile.in @@ -606,7 +606,7 @@ install-force: all install-translations $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/completions $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/functions - $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/man + $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/man/man1 $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/tools $(INSTALL) -m 755 -d $(DESTDIR)$(datadir)/fish/tools/web_config $(INSTALL) -m 644 etc/config.fish $(DESTDIR)$(sysconfdir)/fish/ @@ -620,7 +620,7 @@ install-force: all install-translations true; \ done; for i in share/man/*.1; do \ - $(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/fish/man/; \ + $(INSTALL) -m 644 $$i $(DESTDIR)$(datadir)/fish/man/man1/; \ true; \ done; for i in share/tools/*.py; do\ diff --git a/fish_tests.cpp b/fish_tests.cpp index d99801949..efd699c39 100644 --- a/fish_tests.cpp +++ b/fish_tests.cpp @@ -833,6 +833,7 @@ class history_tests_t { public: static void test_history(void); static void test_history_merge(void); + static void test_history_formats(void); }; static wcstring random_string(void) { @@ -975,6 +976,129 @@ void history_tests_t::test_history_merge(void) { delete everything; //not as scary as it looks } +static bool install_sample_history(const wchar_t *name) { + char command[512]; + snprintf(command, sizeof command, "cp tests/%ls ~/.config/fish/%ls_history", name, name); + if (system(command)) { + err(L"Failed to copy sample history"); + return false; + } + return true; +} + +/* Indicates whether the history is equal to the given null-terminated array of strings. */ +static bool history_equals(history_t &hist, const wchar_t * const *strings) { + /* Count our expected items */ + size_t expected_count = 0; + while (strings[expected_count]) { + expected_count++; + } + + /* Ensure the contents are the same */ + size_t history_idx = 1; + size_t array_idx = 0; + for (;;) { + const wchar_t *expected = strings[array_idx]; + history_item_t item = hist.item_at_index(history_idx); + if (expected == NULL) { + if (! item.empty()) { + err(L"Expected empty item at history index %lu", history_idx); + } + break; + } else { + if (item.str() != expected) { + err(L"Expected '%ls', found '%ls' at index %lu", expected, item.str().c_str(), history_idx); + } + } + history_idx++; + array_idx++; + } + + return true; +} + +void history_tests_t::test_history_formats(void) { + const wchar_t *name; + + // Test inferring and reading legacy and bash history formats + name = L"history_sample_fish_1_x"; + say(L"Testing %ls", name); + if (! install_sample_history(name)) { + err(L"Couldn't open file tests/%ls", name); + } else { + /* Note: This is backwards from what appears in the file */ + const wchar_t * const expected[] = { + L"#def", + + L"echo #abc", + + L"function yay\n" + "echo hi\n" + "end", + + L"cd foobar", + + L"ls /", + + NULL + }; + + history_t &test_history = history_t::history_with_name(name); + if (! history_equals(test_history, expected)) { + err(L"test_history_formats failed for %ls\n", name); + } + test_history.clear(); + } + + name = L"history_sample_fish_2_0"; + say(L"Testing %ls", name); + if (! install_sample_history(name)) { + err(L"Couldn't open file tests/%ls", name); + } else { + const wchar_t * const expected[] = { + L"echo this has\\\nbackslashes", + + L"function foo\n" + "echo bar\n" + "end", + + L"echo alpha", + + NULL + }; + + history_t &test_history = history_t::history_with_name(name); + if (! history_equals(test_history, expected)) { + err(L"test_history_formats failed for %ls\n", name); + } + test_history.clear(); + } + + say(L"Testing bash import"); + FILE *f = fopen("tests/history_sample_bash", "r"); + if (! f) { + err(L"Couldn't open file tests/history_sample_bash"); + } else { + // It should skip over the export command since that's a bash-ism + const wchar_t *expected[] = { + L"echo supsup", + + L"history --help", + + L"echo foo", + + NULL + }; + history_t &test_history = history_t::history_with_name(L"bash_import"); + test_history.populate_from_bash(f); + if (! history_equals(test_history, expected)) { + err(L"test_history_formats failed for bash import\n"); + } + test_history.clear(); + fclose(f); + } +} + /** Main test @@ -1013,6 +1137,7 @@ int main( int argc, char **argv ) test_autosuggest(); history_tests_t::test_history(); history_tests_t::test_history_merge(); + history_tests_t::test_history_formats(); say( L"Encountered %d errors in low-level tests", err_count ); diff --git a/history.cpp b/history.cpp index c271b32e8..65e3273cc 100644 --- a/history.cpp +++ b/history.cpp @@ -91,7 +91,6 @@ class history_lru_node_t : public lru_node_t { required_paths(item.required_paths) {} - bool write_to_file(FILE *f) const; bool write_yaml_to_file(FILE *f) const; }; @@ -264,7 +263,7 @@ static const char *next_line(const char *start, size_t length) { // Pass a pointer to a cursor size_t, initially 0 // If custoff_timestamp is nonzero, skip items created at or after that timestamp // Returns (size_t)(-1) when done -static size_t offset_of_next_item(const char *begin, size_t mmap_length, size_t *inout_cursor, time_t cutoff_timestamp) +static size_t offset_of_next_item_fish_2_0(const char *begin, size_t mmap_length, size_t *inout_cursor, time_t cutoff_timestamp) { size_t cursor = *inout_cursor; size_t result = (size_t)(-1); @@ -334,6 +333,78 @@ static size_t offset_of_next_item(const char *begin, size_t mmap_length, size_t } +// Same as offset_of_next_item_fish_2_0, but for fish 1.x (pre fishfish) +// Adapted from history_populate_from_mmap in history.c +static size_t offset_of_next_item_fish_1_x(const char *begin, size_t mmap_length, size_t *inout_cursor, time_t cutoff_timestamp) { + if (mmap_length == 0 || *inout_cursor >= mmap_length) + return (size_t)(-1); + + const char *end = begin + mmap_length; + const char *pos; + + bool ignore_newline = false; + bool do_push = true; + bool all_done = false; + + size_t result = *inout_cursor; + for( pos = begin + *inout_cursor; pos < end && ! all_done; pos++ ) + { + + if( do_push ) + { + ignore_newline = (*pos == '#'); + do_push = false; + } + + switch( *pos ) + { + case '\\': + { + pos++; + break; + } + + case '\n': + { + if( ignore_newline ) + { + ignore_newline = false; + } + else + { + /* Note: pos will be left pointing just after this newline, because of the ++ in the loop */ + + all_done = true; + } + break; + } + } + } + *inout_cursor = (pos - begin); + return result; +} + +// Returns the offset of the next item based on the given history type, or -1 +static size_t offset_of_next_item(const char *begin, size_t mmap_length, history_file_type_t mmap_type, size_t *inout_cursor, time_t cutoff_timestamp) { + size_t result; + switch (mmap_type) { + case history_type_fish_2_0: + result = offset_of_next_item_fish_2_0(begin, mmap_length, inout_cursor, cutoff_timestamp); + break; + + case history_type_fish_1_x: + result = offset_of_next_item_fish_1_x(begin, mmap_length, inout_cursor, cutoff_timestamp); + break; + + default: + case history_type_unknown: + // Oh well + result = (size_t)(-1); + break; + } + return result; +} + history_t & history_t::history_with_name(const wcstring &name) { /* Note that histories are currently never deleted, so we can return a reference to them without using something like shared_ptr */ scoped_lock locker(hist_lock); @@ -395,15 +466,16 @@ void history_t::add(const wcstring &str, const path_list_t &valid_paths) void history_t::remove(const wcstring &str) { - history_item_t item_to_delete(str); - deleted_items.push_back(item_to_delete); - - for (std::vector::iterator iter = new_items.begin(); iter != new_items.end(); ++iter) + /* Add to our list of deleted items */ + deleted_items.insert(str); + + /* Remove from our list of new items */ + for (std::vector::iterator iter = new_items.begin(); iter != new_items.end();) { - if (iter->match_contents(item_to_delete)) - { - new_items.erase(iter); - break; + if (iter->str() == str) { + iter = new_items.erase(iter); + } else { + iter++; } } } @@ -426,7 +498,7 @@ void history_t::get_string_representation(wcstring &result, const wcstring &sepa load_old_if_needed(); for (std::deque::const_reverse_iterator iter = old_item_offsets.rbegin(); iter != old_item_offsets.rend(); ++iter) { size_t offset = *iter; - const history_item_t item = history_t::decode_item(mmap_start + offset, mmap_length - offset); + const history_item_t item = history_t::decode_item(mmap_start + offset, mmap_length - offset, mmap_type); if (! first) result.append(separator); result.append(item.str()); @@ -454,7 +526,7 @@ history_item_t history_t::item_at_index(size_t idx) { if (idx < old_item_count) { /* idx=0 corresponds to last item in old_item_offsets */ size_t offset = old_item_offsets.at(old_item_count - idx - 1); - return history_t::decode_item(mmap_start + offset, mmap_length - offset); + return history_t::decode_item(mmap_start + offset, mmap_length - offset, mmap_type); } /* Index past the valid range, so return an empty history item */ @@ -506,7 +578,8 @@ static bool extract_prefix(std::string &key, std::string &value, const std::stri return where != std::string::npos; } -history_item_t history_t::decode_item(const char *base, size_t len) { +/* Decode an item via the fish 2.0 format */ +history_item_t history_t::decode_item_fish_2_0(const char *base, size_t len) { wcstring cmd; time_t when = 0; path_list_t paths; @@ -562,7 +635,6 @@ history_item_t history_t::decode_item(const char *base, size_t len) { /* We're going to consume this line */ cursor += advance; - /* Skip the leading dash-space and then store this path it */ line.erase(0, 2); unescape_yaml(line); @@ -574,14 +646,151 @@ history_item_t history_t::decode_item(const char *base, size_t len) { done: paths.reverse(); return history_item_t(cmd, when, paths); +} + +history_item_t history_t::decode_item(const char *base, size_t len, history_file_type_t type) { + switch (type) { + case history_type_fish_1_x: return history_t::decode_item_fish_1_x(base, len); + case history_type_fish_2_0: return history_t::decode_item_fish_2_0(base, len); + default: return history_item_t(L""); + } +} + +/** + Remove backslashes from all newlines. This makes a string from the + history file better formated for on screen display. +*/ +static wcstring history_unescape_newlines_fish_1_x( const wcstring &in_str ) +{ + wcstring out; + for (const wchar_t *in = in_str.c_str(); *in; in++) + { + if( *in == L'\\' ) + { + if( *(in+1)!= L'\n') + { + out.push_back(*in); + } + } + else + { + out.push_back(*in); + } + } + return out; +} + + +/* Decode an item via the fish 1.x format. Adapted from fish 1.x's item_get(). */ +history_item_t history_t::decode_item_fish_1_x(const char *begin, size_t length) { + + const char *end = begin + length; + const char *pos=begin; + + bool was_backslash = 0; + wcstring out; + bool first_char = true; + bool timestamp_mode = false; + time_t timestamp = 0; + while( 1 ) + { + wchar_t c; + mbstate_t state; + size_t res; + + memset( &state, 0, sizeof(state) ); + + res = mbrtowc( &c, pos, end-pos, &state ); + + if( res == (size_t)-1 ) + { + pos++; + continue; + } + else if( res == (size_t)-2 ) + { + break; + } + else if( res == (size_t)0 ) + { + pos++; + continue; + } + pos += res; + + if( c == L'\n' ) + { + if( timestamp_mode ) + { + const wchar_t *time_string = out.c_str(); + while( *time_string && !iswdigit(*time_string)) + time_string++; + errno=0; + + if( *time_string ) + { + time_t tm; + wchar_t *end; + + errno = 0; + tm = (time_t)wcstol( time_string, &end, 10 ); + + if( tm && !errno && !*end ) + { + timestamp = tm; + } + + } + + out.clear(); + timestamp_mode = false; + continue; + } + if( !was_backslash ) + break; + } + + if( first_char ) + { + if( c == L'#' ) + timestamp_mode = true; + } + + first_char = false; + + out.push_back(c); + + was_backslash = ( (c == L'\\') && !was_backslash); + + } + + out = history_unescape_newlines_fish_1_x(out); + return history_item_t(out, timestamp); +} + + +/* Try to infer the history file type based on inspecting the data */ +static history_file_type_t infer_file_type(const char *data, size_t len) { + history_file_type_t result = history_type_unknown; + if (len > 0) { + /* Old fish started with a # */ + if (data[0] == '#') { + result = history_type_fish_1_x; + } else { + /* Assume new fish */ + result = history_type_fish_2_0; + } + } + return result; } void history_t::populate_from_mmap(void) { + mmap_type = infer_file_type(mmap_start, mmap_length); size_t cursor = 0; for (;;) { - size_t offset = offset_of_next_item(mmap_start, mmap_length, &cursor, birth_timestamp); + size_t offset = offset_of_next_item(mmap_start, mmap_length, mmap_type, &cursor, birth_timestamp); // If we get back -1, we're done if (offset == (size_t)(-1)) break; @@ -831,15 +1040,16 @@ void history_t::save_internal() const char *local_mmap_start = NULL; size_t local_mmap_size = 0; if (map_file(name, &local_mmap_start, &local_mmap_size)) { + const history_file_type_t local_mmap_type = infer_file_type(local_mmap_start, local_mmap_size); size_t cursor = 0; for (;;) { - size_t offset = offset_of_next_item(local_mmap_start, local_mmap_size, &cursor, 0); + size_t offset = offset_of_next_item(local_mmap_start, local_mmap_size, local_mmap_type, &cursor, 0); /* If we get back -1, we're done */ if (offset == (size_t)(-1)) break; /* Try decoding an old item */ - const history_item_t old_item = history_t::decode_item(local_mmap_start + offset, local_mmap_size - offset); + const history_item_t old_item = history_t::decode_item(local_mmap_start + offset, local_mmap_size - offset, local_mmap_type); if (old_item.empty() || is_deleted(old_item)) { // debug(0, L"Item is deleted : %s\n", old_item.str().c_str()); @@ -913,12 +1123,14 @@ void history_t::save_internal() } } -void history_t::save(void) { +void history_t::save(void) +{ scoped_lock locker(lock); this->save_internal(); } -void history_t::clear(void) { +void history_t::clear(void) +{ scoped_lock locker(lock); new_items.clear(); deleted_items.clear(); @@ -931,6 +1143,63 @@ void history_t::clear(void) { } +/* Indicate whether we ought to import the bash history file into fish */ +static bool should_import_bash_history_line(const std::string &line) +{ + if (line.empty()) + return false; + + /* Very naive tests! Skip export; probably should skip others. */ + const char * const ignore_prefixes[] = { + "export ", + "#" + }; + + for (size_t i=0; i < sizeof ignore_prefixes / sizeof *ignore_prefixes; i++) { + const char *prefix = ignore_prefixes[i]; + if (! line.compare(0, strlen(prefix), prefix)) { + return false; + } + } + printf("Importing %s\n", line.c_str()); + return true; +} + +void history_t::populate_from_bash(FILE *stream) +{ + /* Bash's format is very simple: just lines with #s for comments. + Ignore a few commands that are bash-specific. This list ought to be expanded. + */ + std::string line; + for (;;) { + line.clear(); + bool success = false, has_newline = false; + + /* Loop until we've read a line */ + do { + char buff[128]; + success = !! fgets(buff, sizeof buff, stream); + if (success) { + /* Skip the newline */ + char *newline = strchr(buff, '\n'); + if (newline) *newline = '\0'; + has_newline = (newline != NULL); + + /* Append what we've got */ + line.append(buff); + } + } while (success && ! has_newline); + + /* Maybe add this line */ + if (should_import_bash_history_line(line)) { + this->add(str2wcstring(line)); + } + + if (line.empty()) + break; + } +} + void history_init() { } @@ -1041,10 +1310,5 @@ void history_t::add_with_file_detection(const wcstring &str) bool history_t::is_deleted(const history_item_t &item) const { - for (std::vector::const_iterator iter = deleted_items.begin(); iter != deleted_items.end(); ++iter) - { - if (iter->match_contents(item)) { return true; } - } - - return false; + return deleted_items.count(item.str()) > 0; } diff --git a/history.h b/history.h index 4b146c1f6..b25d32176 100644 --- a/history.h +++ b/history.h @@ -57,20 +57,18 @@ class history_item_t { const path_list_t &get_required_paths() const { return required_paths; } - bool write_to_file(FILE *f) const; - bool operator==(const history_item_t &other) const { return contents == other.contents && creation_timestamp == other.creation_timestamp && required_paths == other.required_paths; } +}; - bool match_contents(const history_item_t &other) const { - return contents == other.contents; - } - - /* Functions for testing only */ - +/* The type of file that we mmap'd */ +enum history_file_type_t { + history_type_unknown, + history_type_fish_2_0, + history_type_fish_1_x }; class history_t { @@ -101,8 +99,8 @@ class history_t { /** New items. */ std::vector new_items; - /** Deleted items. */ - std::vector deleted_items; + /** Deleted item contents. */ + std::set deleted_items; /** How many items we've added without saving */ size_t unsaved_item_count; @@ -110,17 +108,18 @@ class history_t { /** The mmaped region for the history file */ const char *mmap_start; - /** The size of the mmaped region */ + /** The size of the mmap'd region */ size_t mmap_length; + /** The type of file we mmap'd */ + history_file_type_t mmap_type; + /** Timestamp of when this history was created */ const time_t birth_timestamp; /** Timestamp of last save */ time_t save_timestamp; - static history_item_t decode_item(const char *ptr, size_t len); - void populate_from_mmap(void); /** List of old items, as offsets into out mmap data */ @@ -137,6 +136,11 @@ class history_t { /** Saves history */ void save_internal(); + + /* Versioned decoding */ + static history_item_t decode_item_fish_2_0(const char *base, size_t len); + static history_item_t decode_item_fish_1_x(const char *base, size_t len); + static history_item_t decode_item(const char *base, size_t len, history_file_type_t type); public: /** Returns history with the given name, creating it if necessary */ @@ -157,12 +161,15 @@ class history_t { /** Irreversibly clears history */ void clear(); + /** Populates from a bash history file */ + void populate_from_bash(FILE *f); + /* Gets all the history into a string with ARRAY_SEP_STR. This is intended for the $history environment variable. This may be long! */ void get_string_representation(wcstring &str, const wcstring &separator); /** Return the specified history at the specified index. 0 is the index of the current commandline. (So the most recent item is at index 1.) */ history_item_t item_at_index(size_t idx); - + bool is_deleted(const history_item_t &item) const; }; diff --git a/reader.cpp b/reader.cpp index a7f73b36e..d23d8182e 100644 --- a/reader.cpp +++ b/reader.cpp @@ -1774,6 +1774,19 @@ void reader_sanity_check() } } +/** + Set the specified string from the history as the current buffer. Do + not modify prefix_width. +*/ +static void set_command_line_and_position( const wcstring &new_str, int pos ) +{ + data->command_line = new_str; + data->command_line_changed(); + data->buff_pos = pos; + reader_super_highlight_me_plenty( data->buff_pos ); + reader_repaint(); +} + void reader_replace_current_token( const wchar_t *new_token ) { @@ -1792,23 +1805,11 @@ void reader_replace_current_token( const wchar_t *new_token ) new_buff.append(new_token); new_buff.append(end); new_pos = (begin-buff) + wcslen(new_token); - reader_set_buffer(new_buff, new_pos); + + set_command_line_and_position(new_buff, new_pos); } -/** - Set the specified string from the history as the current buffer. Do - not modify prefix_width. -*/ -static void handle_history( const wcstring &new_str ) -{ - data->command_line = new_str; - data->command_line_changed(); - data->buff_pos=data->command_line.size(); - reader_super_highlight_me_plenty( data->buff_pos ); - reader_repaint(); -} - /** Reset the data structures associated with the token search */ @@ -1828,6 +1829,8 @@ static void reset_token_history() data->search_pos=0; data->search_prev.clear(); data->search_prev.push_back(data->search_buff); + + data->history_search = history_search_t(*data->history, data->search_buff, HISTORY_SEARCH_TYPE_CONTAINS); } @@ -1937,7 +1940,7 @@ static void handle_token_history( int forward, int reset ) //debug( 3, L"ok pos" ); const wcstring last_tok = tok_last( &tok ); - if (find(data->search_prev.begin(), data->search_prev.end(), last_tok) != data->search_prev.end()) { + if (find(data->search_prev.begin(), data->search_prev.end(), last_tok) == data->search_prev.end()) { data->token_history_pos = tok_get_pos( &tok ); str = wcsdup(tok_last( &tok )); } @@ -3122,7 +3125,7 @@ const wchar_t *reader_readline() } else { new_text = data->history_search.current_string(); } - handle_history(new_text); + set_command_line_and_position(new_text, new_text.size()); break; } diff --git a/share/completions/brew.fish b/share/completions/brew.fish new file mode 100644 index 000000000..003b2ecad --- /dev/null +++ b/share/completions/brew.fish @@ -0,0 +1,202 @@ +function __fish_brew_needs_command + set cmd (commandline -opc) + if [ (count $cmd) -eq 1 -a $cmd[1] = 'brew' ] + return 0 + end + return 1 +end + +function __fish_brew_using_command + set cmd (commandline -opc) + if [ (count $cmd) -gt 1 ] + if [ $argv[1] = $cmd[2] ] + return 0 + end + end + return 1 +end + +function __fish_brew_formulae + set -l formuladir (brew --repository)/Library/Formula/ + # __fish_complete_suffix .rb + ls $formuladir/*.rb | sed 's/.rb$//' | sed "s|^$formuladir||" +end + +############ +# commands # +############ + +# audit +complete -f -c brew -n '__fish_brew_needs_command' -a audit -d 'Check formula' +complete -f -c brew -n '__fish_brew_using_command audit' -a '(__fish_brew_formulae)' -d 'formula' + +# cat +complete -f -c brew -n '__fish_brew_needs_command' -a cat -d 'Display formula' +complete -f -c brew -n '__fish_brew_using_command cat' -a '(__fish_brew_formulae)' -d 'formula' + +# cleanup +complete -f -c brew -n '__fish_brew_needs_command' -a cleanup -d 'Remove old installed versions' +complete -f -c brew -n '__fish_brew_using_command cleanup' -l force -d 'Remove out-of-date keg-only brews as well' +complete -f -c brew -n '__fish_brew_using_command cleanup' -a '-n' -d 'Dry run' +complete -f -c brew -n '__fish_brew_using_command cleanup' -a '-s' -d 'Scrubs the cache' +complete -f -c brew -n '__fish_brew_using_command cleanup' -a '(__fish_brew_formulae)' -d 'formula' + +# create +complete -f -c brew -n '__fish_brew_needs_command' -a create -d 'Create new formula from URL' +complete -f -c brew -n '__fish_brew_using_command create' -a '--cmake' -d 'Use template for CMake-style build' +complete -f -c brew -n '__fish_brew_using_command create' -a '--autotools' -d 'Use template for Autotools-style build' +complete -f -c brew -n '__fish_brew_using_command create' -a '--no-fetch' -d 'Don\'t download URL' + +# deps +complete -f -c brew -n '__fish_brew_needs_command' -a deps -d 'Show a formula\'s dependencies' +complete -f -c brew -n '__fish_brew_using_command deps' -a '--1' -d 'Show only 1 level down' +complete -f -c brew -n '__fish_brew_using_command deps' -a '-n' -d 'Show in topological order' +complete -f -c brew -n '__fish_brew_using_command deps' -a '--tree' -d 'Show dependencies as tree' +complete -f -c brew -n '__fish_brew_using_command deps' -a '--all' -d 'Show dependencies for all formulae' +complete -f -c brew -n '__fish_brew_using_command deps' -a '(__fish_brew_formulae)' -d 'formula' + +# diy +complete -f -c brew -n '__fish_brew_needs_command' -a 'diy configure' -d 'Determine installation prefix for non-brew software' +complete -f -c brew -n '__fish_brew_using_command diy' -a '--set-name' -d 'Set name of package' +complete -f -c brew -n '__fish_brew_using_command diy' -a '--set-version' -d 'Set version of package' + +complete -f -c brew -n '__fish_brew_needs_command' -a 'doctor' -d 'Check your system for problems' +complete -f -c brew -n '__fish_brew_needs_command' -a 'edit' -d 'Open brew/formula for editing' + +# fetch +complete -f -c brew -n '__fish_brew_needs_command' -a fetch -d 'Download source for formula' +complete -f -c brew -n '__fish_brew_using_command fetch' -a '--force' -d 'Remove a previously cached version and re-fetch' +complete -f -c brew -n '__fish_brew_using_command fetch' -a '--HEAD' -d 'Download the HEAD version from a VCS' +complete -f -c brew -n '__fish_brew_using_command fetch' -a '--deps' -d 'Also download dependencies' +complete -f -c brew -n '__fish_brew_using_command fetch' -a '-v' -d 'Make HEAD checkout verbose' +complete -f -c brew -n '__fish_brew_using_command fetch' -a '(__fish_brew_formulae)' -d 'formula' + +complete -f -c brew -n '__fish_brew_needs_command' -a 'help' -d 'Display help' + +# home +complete -f -c brew -n '__fish_brew_needs_command' -a home -d 'Open brew/formula\'s homepage' +complete -c brew -n '__fish_brew_using_command home' -a '(__fish_brew_formulae)' -d 'formula' + +# info +complete -f -c brew -n '__fish_brew_needs_command' -a 'info abv' -d 'Display information about formula' +complete -f -c brew -n '__fish_brew_using_command info' -a '--all' -d 'Display info for all formulae' +complete -f -c brew -n '__fish_brew_using_command info' -a '--github' -d 'Open the GitHub History page for formula' +complete -c brew -n '__fish_brew_using_command info' -a '(__fish_brew_formulae)' -d 'formula' + +# install +complete -f -c brew -n '__fish_brew_needs_command' -a 'install' -d 'Install formula' +complete -f -c brew -n '__fish_brew_using_command install' -a '--force' -d 'Force install' +complete -f -c brew -n '__fish_brew_using_command install' -a '--debug' -d 'If install fails, open shell in temp directory' +complete -f -c brew -n '__fish_brew_using_command install' -a '--ignore-dependencies' -d 'skip installing any dependencies of any kind' +complete -f -c brew -n '__fish_brew_using_command install' -a '--fresh' -d 'Don\'t re-use any options from previous installs' +complete -f -c brew -n '__fish_brew_using_command install' -a '--use-clang' -d 'Attempt to compile using clang' +complete -f -c brew -n '__fish_brew_using_command install' -a '--use-gcc' -d 'Attempt to compile using GCC' +complete -f -c brew -n '__fish_brew_using_command install' -a '--use-llvm' -d 'Attempt to compile using the LLVM' +complete -f -c brew -n '__fish_brew_using_command install' -a '--build-from-source' -d 'Compile from source even if a bottle is provided' +complete -f -c brew -n '__fish_brew_using_command install' -a '--devel' -d 'Install the development version of formula' +complete -f -c brew -n '__fish_brew_using_command install' -a '--HEAD' -d 'Install the HEAD version from VCS' +complete -f -c brew -n '__fish_brew_using_command install' -a '--interactive' -d 'Download and patch formula, then open a shell' +complete -c brew -n '__fish_brew_using_command install' -a '(__fish_brew_formulae)' -d 'formula' + +# link +complete -f -c brew -n '__fish_brew_needs_command' -a 'link ln' -d 'Symlink installed formula' +complete -f -c brew -n '__fish_brew_using_command link' -a '(__fish_brew_formulae)' -d 'formula' +complete -f -c brew -n '__fish_brew_using_command ln' -a '(__fish_brew_formulae)' -d 'formula' + +# list +complete -f -c brew -n '__fish_brew_needs_command' -a 'list ls' -d 'List all installed formula' +complete -f -c brew -n '__fish_brew_using_command list' -a '--unbrewed' -d 'List all files in the Homebrew prefix not installed by brew' +complete -f -c brew -n '__fish_brew_using_command list' -a '--versions' -d 'Show the version number' +complete -c brew -n '__fish_brew_using_command list' -a '(__fish_brew_formulae)' -d 'formula' +#ls +complete -f -c brew -n '__fish_brew_using_command ls' -a '--unbrewed' -d 'List all files in the Homebrew prefix not installed by brew' +complete -f -c brew -n '__fish_brew_using_command ls' -a '--versions' -d 'Show the version number' +complete -c brew -n '__fish_brew_using_command ls' -a '(__fish_brew_formulae)' -d 'formula' + +# log +complete -f -c brew -n '__fish_brew_needs_command' -a log -d 'Show log for formula' +complete -c brew -n '__fish_brew_using_command log' -a '(__fish_brew_formulae)' -d 'formula' + +# missing +complete -f -c brew -n '__fish_brew_needs_command' -a missing -d 'Check formula for missing dependencies' +complete -c brew -n '__fish_brew_using_command missing' -a '(__fish_brew_formulae)' -d 'formula' + +# options +complete -f -c brew -n '__fish_brew_needs_command' -a options -d 'Display install options for formula' +complete -c brew -n '__fish_brew_using_command options' -a '(__fish_brew_formulae)' -d 'formula' + +# outdated +complete -f -c brew -n '__fish_brew_needs_command' -a outdated -d 'Show formula that have updated versions' +complete -f -c brew -n '__fish_brew_using_command outdated' -a '--quiet' -d 'Display only names' + +# prune +complete -f -c brew -n '__fish_brew_needs_command' -a prune -d 'Remove dead symlinks' + +# search +complete -f -c brew -n '__fish_brew_needs_command' -a 'search -S' -d 'Search for formula by name' +complete -f -c brew -n '__fish_brew_using_command search' -a '--macports' -d 'Search on MacPorts' +complete -f -c brew -n '__fish_brew_using_command search' -a '--fink' -d 'Search on Fink' +complete -f -c brew -n '__fish_brew_using_command -S' -a '--macports' -d 'Search on MacPorts' +complete -f -c brew -n '__fish_brew_using_command -S' -a '--fink' -d 'Search on Fink' + +# tap +complete -f -c brew -n '__fish_brew_needs_command' -a tap -d 'Tap a new formula repository on GitHub' + +# test +complete -f -c brew -n '__fish_brew_needs_command' -a test -d 'Run tests for formula' +complete -c brew -n '__fish_brew_using_command test' -a '(__fish_brew_formulae)' -d 'formula' + +# uninstall +complete -f -c brew -n '__fish_brew_needs_command' -a 'uninstall remove rm' -d 'Uninstall formula' +complete -c brew -n '__fish_brew_using_command uninstall' -a '(__fish_brew_formulae)' -d 'formula' +complete -c brew -n '__fish_brew_using_command remove' -a '(__fish_brew_formulae)' -d 'formula' +complete -c brew -n '__fish_brew_using_command rm' -a '(__fish_brew_formulae)' -d 'formula' +complete -f -c brew -n '__fish_brew_using_command uninstall' -a '--force' -d 'Delete all installed versions' +complete -f -c brew -n '__fish_brew_using_command remove' -a '--force' -d 'Delete all installed versions' +complete -f -c brew -n '__fish_brew_using_command rm' -a '--force' -d 'Delete all installed versions' + +# unlink +complete -f -c brew -n '__fish_brew_needs_command' -a unlink -d 'Unlink formula' +complete -c brew -n '__fish_brew_using_command unlink' -a '(__fish_brew_formulae)' -d 'formula' + +# untap +complete -f -c brew -n '__fish_brew_needs_command' -a untap -d 'Remove a tapped repository' + +# update +complete -f -c brew -n '__fish_brew_needs_command' -a update -d 'Fetch newest version of Homebrew and formulas' +complete -f -c brew -n '__fish_brew_using_command update' -a '--rebase' -d 'Use git pull --rebase' + +# upgrade +complete -f -c brew -n '__fish_brew_needs_command' -a upgrade -d 'Upgrade outdated brews' +complete -c brew -n '__fish_brew_using_command upgrade' -a '(__fish_brew_formulae)' -d 'formula' + +# uses +complete -f -c brew -n '__fish_brew_needs_command' -a uses -d 'Show formulas that depend on specified formula' +complete -f -c brew -n '__fish_brew_using_command uses' -a '--installed' -d 'List only installed formulae' +complete -c brew -n '__fish_brew_using_command uses' -a '(__fish_brew_formulae)' -d 'formula' + +# versions +complete -f -c brew -n '__fish_brew_needs_command' -a versions -d 'List previous versions of formula' +complete -f -c brew -n '__fish_brew_using_command versions' -a '--compact' -d 'Show all options on a single line' +complete -c brew -n '__fish_brew_using_command versions' -a '(__fish_brew_formulae)' -d 'formula' + + +############ +# switches # +############ +complete -f -c brew -n '__fish_brew_needs_command' -a '-v --version' -d 'Print version number of brew' +complete -f -c brew -n '__fish_brew_needs_command' -l repository -x -d 'Display where Homebrew\'s .git directory is located' +complete -f -c brew -n '__fish_brew_needs_command' -l config -x -d 'Show Homebrew and system configuration' + +# --prefix +complete -f -c brew -n '__fish_brew_needs_command' -l prefix -d 'Display Homebrew\'s install path' +complete -f -c brew -n '__fish_brew_using_command --prefix' -a '(__fish_brew_formulae)' -d 'Display formula\'s install path' + +# --cache +complete -f -c brew -n '__fish_brew_needs_command' -l cache -d 'Display Homebrew\'s download cache' +complete -f -c brew -n '__fish_brew_needs_command' -n '__fish_brew_using_command --cache' -a '(__fish_brew_formulae)' -d 'Display the file or directory used to cache formula' + +# --cellar +complete -f -c brew -n '__fish_brew_needs_command' -l cellar -d 'Display Homebrew\'s Cellar path' +complete -f -c brew -n '__fish_brew_using_command --cellar' -a '(__fish_brew_formulae)' -d 'Display formula\'s install path in Cellar' + diff --git a/share/completions/bzr.fish b/share/completions/bzr.fish new file mode 100644 index 000000000..facbf4783 --- /dev/null +++ b/share/completions/bzr.fish @@ -0,0 +1,604 @@ +# +# Command specific completions for the bzr command. +# These completions were generated from the commands +# man page by the make_completions.py script, but may +# have been hand edited since. +# + +complete -c bzr -l dry-run --description 'Show what would be done, but don\'t actually do anything' +complete -c bzr -l file-ids-from --description 'ARG Lookup file ids from this tree' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l no-recurse --description 'Don\'t recursively add the contents of directories' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l dry-run --description 'Will show which files would be added, but not actually add them' +complete -c bzr -l file-ids-from --description 'Will try to use the file ids from the supplied path' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l remove --description 'Remove the alias' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l all --description 'Show annotations on all lines' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l long --description 'Show commit date in annotations' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l show-ids --description 'Show internal object ids' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l bind --description 'Bind new branch to from location' +complete -c bzr -l files-from --description 'ARG Get file contents from this tree' +complete -c bzr -l hardlink --description 'Hard-link working tree files where possible' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l no-tree --description 'Create a branch without a working-tree' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l stacked --description 'Create a stacked branch referring to the source branch' +complete -c bzr -l standalone --description 'Do not use a shared repository, even if available' +complete -c bzr -l switch --description 'Switch the checkout in the current directory to the new branch' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l use-existing-dir --description 'By default branch will fail if the target directory exists, but does not already have a control directory' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l recursive -s R --description 'Recursively scan for branches rather than just looking in the specified location' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l config --description 'LOCATION is the directory where the config lock is' +complete -c bzr -l force --description 'Do not ask for confirmation before breaking the lock' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l filters --description 'Apply content filters to display the convenience form' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l name-from-revision --description 'The path name in the old tree' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l branch --description 'Check the branch related to the current directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l repo --description 'Check the repository related to the current directory' +complete -c bzr -l tree --description 'Check the working tree related to the current directory' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l files-from --description 'ARG Get file contents from this tree' +complete -c bzr -l hardlink --description 'Hard-link working tree files where possible' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l lightweight --description 'Perform a lightweight checkout' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l detritus --description 'Delete conflict files, merge and revert backups, and failed selftest dirs' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l dry-run --description 'Show files to delete instead of deleting them' +complete -c bzr -l force --description 'Do not prompt before deleting' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l ignored --description 'Delete all ignored files' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l unknown --description 'Delete files unknown to bzr (default)' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l author --description 'ARG Set the author\'s name, if it\'s different from the committer' +complete -c bzr -l commit-time --description 'ARG Manually set a commit time using commit date format, e' +complete -c bzr -l exclude --description 'ARG, -x Do not consider changes made to a given path' +complete -c bzr -l file --description 'MSGFILE, -F Take commit message from this file' +complete -c bzr -l fixes --description 'ARG Mark a bug as being fixed by this revision (see "bzr help bugs")' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l local --description 'Perform a local commit in a bound branch' +complete -c bzr -l lossy --description 'When committing to a foreign version control system do not push data that can not be natively represented' +complete -c bzr -l message --description 'ARG, -m Description of the new revision' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l show-diff -s p --description 'When no message is supplied, show the diff along with the status summary in the message editor' +complete -c bzr -l strict --description 'Refuse to commit if there are unknown files in the working tree' +complete -c bzr -l unchanged --description 'Commit even if nothing has changed' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l show-diff --description 'Option' +complete -c bzr -l all --description 'Display all the defined values for the matching options' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l remove --description 'Remove the option from the configuration file' +complete -c bzr -l scope --description 'ARG Reduce the scope to the specified configuration file' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l text --description 'List paths of files with text conflicts' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l show-ids --description 'Show internal object ids' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l change --description 'ARG, -c Select changes introduced by the specified revision' +complete -c bzr -l diff-options --description 'ARG Pass these options to the external diff program' +complete -c bzr -l format --description 'ARG, -F Diff format to use' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l new --description 'ARG Branch/tree to compare to' +complete -c bzr -l old --description 'ARG Branch/tree to compare from' +complete -c bzr -l prefix --description 'ARG, -p Set prefixes added to old and new filenames, as two values separated by a colon' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l using --description 'ARG Use this command to compare files' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l directory --description 'ARG, -d Branch to push from, rather than the one containing the working directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l no-rebase --description 'Do not rebase after push' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l remember --description 'Remember the specified location as a default' +complete -c bzr -l strict --description 'Refuse to push if there are uncommitted changes in the working tree, --no-strict disables the check' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l filters --description 'Apply content filters to export the convenient form' +complete -c bzr -l format --description 'ARG Type of file to export to' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l per-file-timestamps --description 'Set modification time of files to that of the last revision in which it was changed' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l root --description 'ARG Name of the root directory inside the exported file' +complete -c bzr -l uncommitted --description 'Export the working tree contents rather than that of the last revision' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l long --description 'Show help on all commands' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l default-rules --description 'Display the default ignore rules that bzr uses' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l append-revisions-only --description 'Never change revnos or the existing log' +complete -c bzr -l create-prefix --description 'Create the path leading up to the branch if it does not already exist' +complete -c bzr -l format --description 'ARG Specify a format for this branch' +complete -c bzr -l 2a --description 'Format for the bzr 2' +complete -c bzr -l default --description 'Format for the bzr 2' +complete -c bzr -l development-colo --description 'The 2a format with experimental support for colocated branches' +complete -c bzr -l pack-0.92 --description 'Pack-based format used in 1' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l no-tree --description 'Create a branch without a working tree' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l format --description 'ARG Specify a format for this repository' +complete -c bzr -l 2a --description 'Format for the bzr 2' +complete -c bzr -l default --description 'Format for the bzr 2' +complete -c bzr -l development-colo --description 'The 2a format with experimental support for colocated branches' +complete -c bzr -l pack-0.92 --description 'Pack-based format used in 1' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l no-trees --description 'Branches in the repository will default to not having a working tree' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l authors --description 'ARG What names to list as authors - first, all or committer' +complete -c bzr -l change --description 'ARG, -c Show just the specified revision' +complete -c bzr -l exclude-common-ancestry --description 'Display only the revisions that are not part of both ancestries (require -rX' +complete -c bzr -l forward --description 'Show from oldest to newest' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l include-merged --description 'Show merged revisions like --levels 0 does' +complete -c bzr -l levels --description 'N, -n Number of levels to display - 0 for all, 1 for flat' +complete -c bzr -l limit --description 'N, -l Limit the output to the first N revisions' +complete -c bzr -l log-format --description 'ARG Use specified log format' +complete -c bzr -l gnu-changelog --description 'Format used by GNU ChangeLog files' +complete -c bzr -l line --description 'Log format with one line per revision' +complete -c bzr -l long --description 'Detailed log format' +complete -c bzr -l short --description 'Moderately short log format' +complete -c bzr -l match --description 'ARG, -m Show revisions whose properties match this expression' +complete -c bzr -l match-author --description 'ARG Show revisions whose authors match this expression' +complete -c bzr -l match-bugs --description 'ARG Show revisions whose bugs match this expression' +complete -c bzr -l match-committer --description 'ARG Show revisions whose committer matches this expression' +complete -c bzr -l match-message --description 'ARG Show revisions whose message matches this expression' +complete -c bzr -l omit-merges --description 'Do not report commits with more than one parent' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l show-diff -s p --description 'Show changes made in each revision as a patch' +complete -c bzr -l show-ids --description 'Show internal object ids' +complete -c bzr -l signatures --description 'Show digital signature validity' +complete -c bzr -l timezone --description 'ARG Display timezone as local, original, or utc' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Show files changed in each revision' +complete -c bzr -s l --description 'N display a maximum of N revisions -n N display N levels of revisions (0 for all, 1 for collapsed) -v display a status summary (delta) for each revision -p display a diff (patch) for each revision --show-ids display revision-ids (and file-ids), not just revnos' +complete -c bzr -o rX --description 'Display revision X -rX' +complete -c bzr -o r..Y --description 'Display up to and including revision Y -rX' +complete -c bzr -o r-1 --description 'Show just the tip -r-10' +complete -c bzr -o rsubmit:.. --description 'Show what\'s new on this branch -rancestor:path' +complete -c bzr -o rdate:yesterday.. --description 'Show changes since yesterday' +complete -c bzr -l match-message --description 'Can be used to only match a specific field' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l from-root --description 'Print paths relative to the root of the branch' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l ignored -s i --description 'Print ignored files' +complete -c bzr -l kind --description 'ARG, -k List entries of a particular kind: file, directory, symlink' +complete -c bzr -l null -s 0 --description 'Use an ASCII NUL (\0) separator rather than a newline' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l recursive -s R --description 'Recurse into subdirectories' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l show-ids --description 'Show internal object ids' +complete -c bzr -l unknown -s u --description 'Print unknown files' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l versioned -s V --description 'Print versioned files' +complete -c bzr -l change --description 'ARG, -c Select changes introduced by the specified revision' +complete -c bzr -l directory --description 'ARG, -d Branch to merge into, rather than the one containing the working directory' +complete -c bzr -l force --description 'Merge even if the destination tree has uncommitted changes' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l interactive -s i --description 'Select changes interactively' +complete -c bzr -l merge-type --description 'ARG Select a particular merge algorithm' +complete -c bzr -l diff3 --description 'Merge using external diff3' +complete -c bzr -l lca --description 'LCA-newness merge' +complete -c bzr -l merge3 --description 'Native diff3-style merge' +complete -c bzr -l weave --description 'Weave-based merge' +complete -c bzr -l preview --description 'Instead of merging, show a diff of the merge' +complete -c bzr -l pull --description 'If the destination is already completely merged into the source, pull from the source rather than merging' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l remember --description 'Remember the specified location as a default' +complete -c bzr -l reprocess --description 'Reprocess to reduce spurious conflicts' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l show-base --description 'Show base revision text in conflicts' +complete -c bzr -l uncommitted --description 'Apply uncommitted changes from a working copy, instead of branch changes' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l include-merged --description 'Show all revisions in addition to the mainline ones' +complete -c bzr -l log-format --description 'ARG Use specified log format' +complete -c bzr -l gnu-changelog --description 'Format used by GNU ChangeLog files' +complete -c bzr -l line --description 'Log format with one line per revision' +complete -c bzr -l long --description 'Detailed log format' +complete -c bzr -l short --description 'Moderately short log format' +complete -c bzr -l mine-only --description 'Display changes in the local branch only' +complete -c bzr -l my-revision --description 'ARG Filter on local branch revisions (inclusive)' +complete -c bzr -l other --description 'Same as --theirs-only' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l reverse --description 'Reverse the order of revisions' +complete -c bzr -l revision --description 'ARG, -r Filter on other branch revisions (inclusive)' +complete -c bzr -l show-ids --description 'Show internal object ids' +complete -c bzr -l theirs-only --description 'Display changes in the remote branch only' +complete -c bzr -l this --description 'Same as --mine-only' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l parents -s p --description 'No error if existing, make parent directories as needed' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l after --description 'Move only the bzr identifier of the file, because the file has already been moved' +complete -c bzr -l auto --description 'Automatically guess renames' +complete -c bzr -l dry-run --description 'Avoid making changes when guessing renames' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l clean-obsolete-packs --description 'Delete obsolete packs to save disk space' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l verbose --description 'Shows the path where each plugin is located' +complete -c bzr -l directory --description 'ARG, -d Branch to pull into, rather than the one containing the working directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l local --description 'Perform a local pull in a bound branch' +complete -c bzr -l overwrite --description 'Ignore differences between branches and overwrite unconditionally' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l remember --description 'Remember the specified location as a default' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l show-base --description 'Show base revision text in conflicts' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Show logs of pulled revisions' +complete -c bzr -l create-prefix --description 'Create the path leading up to the branch if it does not already exist' +complete -c bzr -l directory --description 'ARG, -d Branch to push from, rather than the one containing the working directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l no-tree --description 'Don\'t populate the working tree, even for protocols that support it' +complete -c bzr -l overwrite --description 'Ignore differences between branches and overwrite unconditionally' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l remember --description 'Remember the specified location as a default' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l stacked --description 'Create a stacked branch that references the public location of the parent branch' +complete -c bzr -l stacked-on --description 'ARG Create a stacked branch that refers to another branch for the commit history' +complete -c bzr -l strict --description 'Refuse to push if there are uncommitted changes in the working tree, --no-strict disables the check' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l use-existing-dir --description 'By default push will fail if the target directory exists, but does not already have a control directory' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l bind-to --description 'ARG Branch to bind checkout to' +complete -c bzr -l force --description 'Perform reconfiguration even if local changes will be lost' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l repository_trees --description 'ARG Whether new branches in the repository have trees' +complete -c bzr -l with-no-trees --description 'Reconfigure repository to not create working trees on branches by default' +complete -c bzr -l with-trees --description 'Reconfigure repository to create working trees on branches by default' +complete -c bzr -l repository_type --description 'ARG Location fo the repository' +complete -c bzr -l standalone --description 'Reconfigure to be a standalone branch (i' +complete -c bzr -l use-shared --description 'Reconfigure to use a shared repository' +complete -c bzr -l stacked-on --description 'ARG Reconfigure a branch to be stacked on another branch' +complete -c bzr -l tree_type --description 'ARG The relation between branch and tree' +complete -c bzr -l branch --description 'Reconfigure to be an unbound branch with no working tree' +complete -c bzr -l checkout --description 'Reconfigure to be a bound branch with a working tree' +complete -c bzr -l lightweight-checkout --description 'Reconfigure to be a lightweight checkout (with no local history)' +complete -c bzr -l tree --description 'Reconfigure to be an unbound branch with a working tree' +complete -c bzr -l unstacked --description 'Reconfigure a branch to be unstacked' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l merge-type --description 'ARG Select a particular merge algorithm' +complete -c bzr -l diff3 --description 'Merge using external diff3' +complete -c bzr -l lca --description 'LCA-newness merge' +complete -c bzr -l merge3 --description 'Native diff3-style merge' +complete -c bzr -l weave --description 'Weave-based merge' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l reprocess --description 'Reprocess to reduce spurious conflicts' +complete -c bzr -l show-base --description 'Show base revision text in conflicts' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l file-deletion-strategy --description 'ARGThe file deletion mode to be used' +complete -c bzr -l force --description 'Delete all the specified files, even if they can not be recovered and even if they are non-empty directories' +complete -c bzr -l keep --description 'Delete from bzr but leave the working copy' +complete -c bzr -l no-backup --description 'Don\'t backup changed files' +complete -c bzr -l safe --description 'Backup changed files (default)' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l new --description 'Only remove files that have never been committed' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l force --description 'Remove branch even if it is the active branch' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l force --description 'Remove the working tree even if it has uncommitted or shelved changes' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l action --description 'ARG How to resolve the conflict' +complete -c bzr -l done --description 'Marks the conflict as resolved' +complete -c bzr -l take-other --description 'Resolve the conflict taking the merged version into account' +complete -c bzr -l take-this --description 'Resolve the conflict preserving the version in the working tree' +complete -c bzr -l all --description 'Resolve all conflicts in this tree' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l forget-merges --description 'Remove pending merge marker, without changing any files' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l no-backup --description 'Do not save backups of reverted files' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l tree --description 'Show revno of working tree' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l body --description 'ARG Body for the email' +complete -c bzr -l format --description 'ARG Use the specified output format' +complete -c bzr -l from --description 'ARG, -f Branch to generate the submission from, rather than the one containing the working directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l mail-to --description 'ARG Mail the request to this address' +complete -c bzr -l message --description 'ARG, -m Message string' +complete -c bzr -l no-bundle --description 'Do not include a bundle in the merge directive' +complete -c bzr -l no-patch --description 'Do not include a preview patch in the merge directive' +complete -c bzr -l output --description 'ARG, -o Write merge directive to this file or directory; use - for stdout' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l remember --description 'Remember submit and public branch' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l strict --description 'Refuse to send if there are uncommitted changes in the working tree, --no-strict disables the check' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l allow-writes --description 'By default the server is a readonly server' +complete -c bzr -l client-timeout --description 'ARG Override the default idle client timeout (5min)' +complete -c bzr -l directory --description 'ARG, -d Serve contents of this directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l inet --description 'Serve on stdin/out for use from inetd or sshd' +complete -c bzr -l port --description 'ARG Listen for connections on nominated port of the form [hostname:]portnumber' +complete -c bzr -l protocol --description 'ARG Protocol to serve' +complete -c bzr -l bzr --description 'The Bazaar smart server protocol over TCP' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l all --description 'Shelve all changes' +complete -c bzr -l destroy --description 'Destroy removed changes instead of shelving them' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l list --description 'List shelved changes' +complete -c bzr -l message --description 'ARG, -m Message string' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l writer --description 'ARG Method to use for writing diffs' +complete -c bzr -l plain --description 'Plaintext diff output' +complete -c bzr -l dry-run --description 'Don\'t actually sign anything, just print the revisions that would be signed' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l change --description 'ARG, -c Select changes introduced by the specified revision' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l no-classify --description 'Do not mark object type using indicator' +complete -c bzr -l no-pending --description 'Don\'t show pending merges' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l short -s S --description 'Use short status indicators' +complete -c bzr -l show-ids --description 'Show internal object ids' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l versioned -s V --description 'Only show versioned files' +complete -c bzr -l create-branch -s b --description 'Create the target branch from this one before switching to it' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l force --description 'Switch even if local commits will be lost' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l delete --description 'Delete this tag rather than placing it' +complete -c bzr -l directory --description 'ARG, -d Branch in which to place the tag' +complete -c bzr -l force --description 'Replace existing tags' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l delete --description 'Oldname``' +complete -c bzr -l directory --description 'ARG, -d Branch whose tags should be displayed' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l show-ids --description 'Show internal object ids' +complete -c bzr -l sort --description 'ARG Sort tags by different criteria' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l long --description 'Produce long-format testament' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l strict --description 'Produce a strict-format testament' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l dry-run --description 'Don\'t actually make changes' +complete -c bzr -l force --description 'Say yes to all questions' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l keep-tags --description 'Keep tags that point to removed revisions' +complete -c bzr -l local --description 'Only remove the commits from the local branch when in a checkout' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l verbose --description 'Will print out what is being removed' +complete -c bzr -l dry-run --description 'Will go through all the motions, but not actually remove anything' +complete -c bzr -l action --description 'ARG The action to perform' +complete -c bzr -l apply --description 'Apply changes and remove from the shelf' +complete -c bzr -l delete-only --description 'Delete changes without applying them' +complete -c bzr -l dry-run --description 'Show changes, but do not apply or remove them' +complete -c bzr -l keep --description 'Apply changes but don\'t delete them' +complete -c bzr -l preview --description 'Instead of unshelving the changes, show the diff that would result from unshelving' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l show-base --description 'Show base revision text in conflicts' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l clean --description 'Remove the backup' +complete -c bzr -l dry-run --description 'Show what would be done, but don\'t actually do anything' +complete -c bzr -l format --description 'ARG Upgrade to a specific format' +complete -c bzr -l 2a --description 'Format for the bzr 2' +complete -c bzr -l default --description 'Format for the bzr 2' +complete -c bzr -l development-colo --description 'The 2a format with experimental support for colocated branches' +complete -c bzr -l pack-0.92 --description 'Pack-based format used in 1' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l acceptable-keys --description 'ARG, -k Comma separated list of GPG key patterns which are acceptable for verification' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l short --description 'Print just the version number' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l all --description 'Include all possible information' +complete -c bzr -l check-clean --description 'Check if tree is clean' +complete -c bzr -l format --description 'ARG Select the output format' +complete -c bzr -l custom --description 'Version info in Custom template-based format' +complete -c bzr -l python --description 'Version info in Python format' +complete -c bzr -l rio --description 'Version info in RIO (simple text) format (default)' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l include-file-revisions --description 'Include the last revision for each file' +complete -c bzr -l include-history --description 'Include the revision-history' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l revision --description 'ARG, -r See "help revisionspec" for details' +complete -c bzr -l template --description 'ARG Template for the output' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l template --description 'VERSION_INFO \"Project 1' +complete -c bzr -l all --description 'Apply list or delete action to all views' +complete -c bzr -l delete --description 'Delete the view' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l name --description 'ARG Name of the view to define, list or delete' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l switch --description 'ARG Name of the view to switch to' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' +complete -c bzr -l branch --description 'Set identity for the current branch instead of globally' +complete -c bzr -l directory --description 'ARG, -d Branch to operate on, instead of working directory' +complete -c bzr -l email --description 'Display email address only' +complete -c bzr -l help -s h --description 'Show help message' +complete -c bzr -l quiet -s q --description 'Only display errors and warnings' +complete -c bzr -l usage --description 'Show usage message and options' +complete -c bzr -l verbose -s v --description 'Display more information' diff --git a/tests/history_sample_bash b/tests/history_sample_bash new file mode 100644 index 000000000..0be128a00 --- /dev/null +++ b/tests/history_sample_bash @@ -0,0 +1,7 @@ +echo foo +history --help +#1339718290 +export HISTTIMEFORMAT='%F %T ' +#1339718298 +echo supsup +#abcde diff --git a/tests/history_sample_fish_1_x b/tests/history_sample_fish_1_x new file mode 100644 index 000000000..dd09d4cb6 --- /dev/null +++ b/tests/history_sample_fish_1_x @@ -0,0 +1,12 @@ +# 1339519901 +ls / +# 1339519903 +cd foobar +# 1339519906 +function yay\ +echo hi\ +end +# 1339520882 +echo #abc +# 1339520884 +#def diff --git a/tests/history_sample_fish_2_0 b/tests/history_sample_fish_2_0 new file mode 100644 index 000000000..f44bbfc0c --- /dev/null +++ b/tests/history_sample_fish_2_0 @@ -0,0 +1,6 @@ +- cmd: echo alpha + when: 1339717374 +- cmd: function foo\necho bar\nend + when: 1339717377 +- cmd: echo this has\\\nbackslashes + when: 1339717385