Anonymous avatar Anonymous committed 458c00e Merge

merge

Comments (0)

Files changed (14)

 4ffa9f4d740041e648b7ef76e0a9681c57ba4ac2 0.2003
 5e63c937da8b970fbc56572a5ae5b66ee6dc1d82 0.2004
 ca7a6fe29454e7ccf6076ec9357b7a45ae52317b 0.2005
+35126af5952c10ea7f7385460ebe8cd94a62ba82 0.2006
 Revision history for Passwd::Keyring::KDEWallet
 
+0.2006	2012-11-20
+	Tests don't fail but are skipped when module is built on
+	system with DBUS but without KDEWallet.
+
+        Unifying exception texts.
+
+
 0.2005	2012-11-15
 	Fixed bugs in package dependencies and metadata (wrong homepage
         and repository page links etc)
     KDE Wallet.
 
 VERSION
-    Version 0.2005
+    Version 0.2006
 
 SYNOPSIS
     KDE Wallet based implementation of Passwd::Keyring.
 
 SUBROUTINES/METHODS
   new(app=>'app name', group=>'passwords folder')
-    Initializes the processing. Croaks if kwallet does not seem to be
-    available.
+    Initializes the processing. Croaks if kwallet (or d-bus, or anything
+    needed) does not seem to be available.
 
     Handled named parameters:
 

lib/Passwd/Keyring/KDEWallet.pm

 
 =head1 VERSION
 
-Version 0.2005
+Version 0.2006
 
 =cut
 
-our $VERSION = '0.2005';
+our $VERSION = '0.2006';
 
 our $APP_NAME = "Passwd::Keyring";
 our $FOLDER_NAME = "Perl-Passwd-Keyring";
 
 =head2 new(app=>'app name', group=>'passwords folder')
 
-Initializes the processing. Croaks if kwallet does not 
+Initializes the processing. Croaks if kwallet (or d-bus, or anything needed) does not 
 seem to be available.
 
 Handled named parameters: 
     #$self->{bus} = Net::DBus->find()
     $self->{bus} = Net::DBus->session()
       or croak("KWallet not available (can't access DBus)");
-    my $kwallet_svc = $self->{bus}->get_service('org.kde.kwalletd')
-      or croak("KWallet not available (can't access KWallet, likely kwalletd not running)");
+    # get_service also may fail by itself, I got cpantesters reports with message
+    # "org.freedesktop.DBus.Error.ServiceUnknown: The name org.kde.kwalletd was not provided by any .service files"
+    # Let's rewrite this slightly
+    my$kwallet_svc;
+    eval {
+        $kwallet_svc = $self->{bus}->get_service('org.kde.kwalletd');
+    };
+    if($@) {
+        croak("KWallet not available (not installed?). Details:\n$@");
+    } elsif (! $kwallet_svc) {
+        croak("KWallet not available (can't access KWallet, likely kwalletd not running)");
+    }
     $self->{kwallet} = $kwallet_svc->get_object('/modules/kwalletd', 'org.kde.KWallet')
       or croak("Kwallet not available (can't find wallet)");
     $self->_open_if_not_open();
 }
 
 diag( "Testing Passwd::Keyring::KDEWallet $Passwd::Keyring::KDEWallet::VERSION, Perl $], $^X" );
-diag( "Consider spawning  kwalletmanager  to check whether some passwords remained uncleared" );
+diag( "Consider spawning  kwalletmanager  to observe test consequences" );

t/01-set-and-get.t

 use Test::More;
 
 if($ENV{DESKTOP_SESSION} || $ENV{DBUS_SESSION_BUS_ADDRESS}) {
-    plan tests => 8;
+    plan tests => 9;
 } else {
     plan skip_all => "Keyring not available (not running under KDE/Gnome/other desktop session), skipping tests";
 }
 
-
 use Passwd::Keyring::KDEWallet;
 
-my $ring = Passwd::Keyring::KDEWallet->new;
+SKIP: {
 
-ok( defined($ring) && ref $ring eq 'Passwd::Keyring::KDEWallet',   'new() works' );
+    my $ring;
+    eval {
+        $ring = Passwd::Keyring::KDEWallet->new;
+    }; if($@) {
+        if($@ =~ /^KWallet not available/) {
+            skip "KWallet not available ($@)", 9;
+        } else {
+            die $@;
+        }
+    }
 
-my $USER = 'John';
-my $PASSWORD = 'verysecret';
-my $REALM = 'some simple realm';
+    ok( defined($ring), "new() constructed something");
+    ok( defined($ring) && ref $ring eq 'Passwd::Keyring::KDEWallet', 'new() constructed KDEWallet' );
 
-$ring->set_password($USER, $PASSWORD, $REALM);
+    my $USER = 'John';
+    my $PASSWORD = 'verysecret';
+    my $REALM = 'some simple realm';
 
-ok( 1, "set_password works" );
+    $ring->set_password($USER, $PASSWORD, $REALM);
 
-is( $ring->get_password($USER, $REALM), $PASSWORD, "get recovers");
+    ok( 1, "set_password works" );
 
-is( $ring->clear_password($USER, $REALM), 1, "clear_password removed one password" );
+    is( $ring->get_password($USER, $REALM), $PASSWORD, "get recovers");
 
-is( $ring->get_password($USER, $REALM), undef, "no password after clear");
+    is( $ring->clear_password($USER, $REALM), 1, "clear_password removed one password" );
 
-is( $ring->clear_password($USER, $REALM), 0, "clear_password again has nothing to clear" );
+    is( $ring->get_password($USER, $REALM), undef, "no password after clear");
 
-is( $ring->clear_password("Non user", $REALM), 0, "clear_password for unknown user has nothing to clear" );
-is( $ring->clear_password("$USER", 'non realm'), 0, "clear_password for unknown realm has nothing to clear" );
+    is( $ring->clear_password($USER, $REALM), 0, "clear_password again has nothing to clear" );
+
+    is( $ring->clear_password("Non user", $REALM), 0, "clear_password for unknown user has nothing to clear" );
+    is( $ring->clear_password("$USER", 'non realm'), 0, "clear_password for unknown realm has nothing to clear" );
+
+}

t/02-is-persistent.t

 use strict;
 use warnings;
 use Test::More;
+use Passwd::Keyring::KDEWallet;
 
 if($ENV{DESKTOP_SESSION} || $ENV{DBUS_SESSION_BUS_ADDRESS}) {
     plan tests => 2;
     plan skip_all => "Keyring not available (not running under KDE/Gnome/other desktop session), skipping tests";
 }
 
+SKIP: {
+    my $ring;
+    eval {
+        $ring = Passwd::Keyring::KDEWallet->new;
+    }; if($@) {
+        if($@ =~ /^KWallet not available/) {
+            skip "KWallet not available ($@)", 2;
+        } else {
+            die $@;
+        }
+    }
 
-use Passwd::Keyring::KDEWallet;
+    ok( defined($ring) && ref $ring eq 'Passwd::Keyring::KDEWallet',   'new() works' );
 
-my $ring = Passwd::Keyring::KDEWallet->new;
+    ok( $ring->is_persistent eq 1, "is_persistent knows we are persistent");
+}
 
-ok( defined($ring) && ref $ring eq 'Passwd::Keyring::KDEWallet',   'new() works' );
-
-ok( $ring->is_persistent eq 1, "is_persistent knows we are persistent");
-

t/03-many-sets-and-gets.t

 use strict;
 use warnings;
 use Test::More;
+use Passwd::Keyring::KDEWallet;
 
 if($ENV{DESKTOP_SESSION} || $ENV{DBUS_SESSION_BUS_ADDRESS}) {
     plan tests => 11;
     plan skip_all => "Keyring not available (not running under KDE/Gnome/other desktop session), skipping tests";
 }
 
-
-use Passwd::Keyring::KDEWallet;
-
 my $SOME_REALM = 'my@@realm';
 my $OTHER_REALM = 'other realm';
 
-my $ring = Passwd::Keyring::KDEWallet->new(app=>"Passwd::Keyring::KDEWallet", group=>"Unit tests");
+SKIP: {
 
-ok( defined($ring) && ref $ring eq 'Passwd::Keyring::KDEWallet',   'new() works' );
+    my $ring;
+    eval {
+        $ring = Passwd::Keyring::KDEWallet->new(app=>"Passwd::Keyring::KDEWallet", group=>"Unit tests");
+    }; if($@) {
+        if($@ =~ /^KWallet not available/) {
+            skip "KWallet not available ($@)", 11;
+        } else {
+            die $@;
+        }
+    }
 
-$ring->set_password("Paul", "secret-Paul", $SOME_REALM);
-$ring->set_password("Gregory", "secret-Greg", $SOME_REALM);#
-$ring->set_password("Paul", "secret-Paul2", $OTHER_REALM);
-$ring->set_password("Duke", "secret-Duke", $SOME_REALM);
+    ok( defined($ring) && ref $ring eq 'Passwd::Keyring::KDEWallet',   'new() works' );
 
-ok( 1, "set_password works" );
+    $ring->set_password("Paul", "secret-Paul", $SOME_REALM);
+    $ring->set_password("Gregory", "secret-Greg", $SOME_REALM); #
+    $ring->set_password("Paul", "secret-Paul2", $OTHER_REALM);
+    $ring->set_password("Duke", "secret-Duke", $SOME_REALM);
 
-ok( $ring->get_password("Paul", $SOME_REALM) eq 'secret-Paul', "get works");
+    ok( 1, "set_password works" );
 
-ok( $ring->get_password("Gregory", $SOME_REALM) eq 'secret-Greg', "get works");
+    ok( $ring->get_password("Paul", $SOME_REALM) eq 'secret-Paul', "get works");
 
-ok( $ring->get_password("Paul", $OTHER_REALM) eq 'secret-Paul2', "get works");
+    ok( $ring->get_password("Gregory", $SOME_REALM) eq 'secret-Greg', "get works");
 
-ok( $ring->get_password("Duke", $SOME_REALM) eq 'secret-Duke', "get works");
+    ok( $ring->get_password("Paul", $OTHER_REALM) eq 'secret-Paul2', "get works");
 
-ok( $ring->clear_password("Paul", $SOME_REALM) eq 1, "clear_password removed 1");
+    ok( $ring->get_password("Duke", $SOME_REALM) eq 'secret-Duke', "get works");
 
-ok( ! defined($ring->get_password("Paul", $SOME_REALM)), "get works");
+    ok( $ring->clear_password("Paul", $SOME_REALM) eq 1, "clear_password removed 1");
 
-ok( $ring->get_password("Gregory", $SOME_REALM) eq 'secret-Greg', "get works");
+    ok( ! defined($ring->get_password("Paul", $SOME_REALM)), "get works");
 
-ok( $ring->get_password("Paul", $OTHER_REALM) eq 'secret-Paul2', "get works");
+    ok( $ring->get_password("Gregory", $SOME_REALM) eq 'secret-Greg', "get works");
 
-ok( $ring->get_password("Duke", $SOME_REALM) eq 'secret-Duke', "get works");
+    ok( $ring->get_password("Paul", $OTHER_REALM) eq 'secret-Paul2', "get works");
 
+    ok( $ring->get_password("Duke", $SOME_REALM) eq 'secret-Duke', "get works");
 
-# Note: cleanup is performed by test 04, we test passing data to
-#       separate program.
+
+    # Note: cleanup is performed by test 04, we test passing data to
+    #       separate program.
+}

t/04-recovering-in-sep-prog.t

 use strict;
 use warnings;
 use Test::More;
+use Passwd::Keyring::KDEWallet;
 
 if($ENV{DESKTOP_SESSION} || $ENV{DBUS_SESSION_BUS_ADDRESS}) {
     plan tests => 13;
     plan skip_all => "Keyring not available (not running under KDE/Gnome/other desktop session), skipping tests";
 }
 
+SKIP: {
 
-use Passwd::Keyring::KDEWallet;
+    my $SOME_REALM = 'my@@realm';
+    my $OTHER_REALM = 'other realm';
 
-my $SOME_REALM = 'my@@realm';
-my $OTHER_REALM = 'other realm';
+    my $ring; 
 
-my $ring = Passwd::Keyring::KDEWallet->new(app=>"Passwd::Keyring::KDEWallet", group=>"Unit tests");
+    eval {
+        $ring = Passwd::Keyring::KDEWallet->new(app=>"Passwd::Keyring::KDEWallet", group=>"Unit tests");
+    }; if($@) {
+        if($@ =~ /^KWallet not available/) {
+            skip "KWallet not available ($@)", 13;
+        } else {
+            die $@;
+        }
+    }
 
-ok( defined($ring) && ref $ring eq 'Passwd::Keyring::KDEWallet',   'new() works' );
+    ok( defined($ring) && ref $ring eq 'Passwd::Keyring::KDEWallet',   'new() works' );
 
-ok( ! defined($ring->get_password("Paul", $SOME_REALM)), "get works");
+    ok( ! defined($ring->get_password("Paul", $SOME_REALM)), "get works");
 
-ok( $ring->get_password("Gregory", $SOME_REALM) eq 'secret-Greg', "get works");
+    ok( $ring->get_password("Gregory", $SOME_REALM) eq 'secret-Greg', "get works");
 
-ok( $ring->get_password("Paul", $OTHER_REALM) eq 'secret-Paul2', "get works");
+    ok( $ring->get_password("Paul", $OTHER_REALM) eq 'secret-Paul2', "get works");
 
-ok( $ring->get_password("Duke", $SOME_REALM) eq 'secret-Duke', "get works");
+    ok( $ring->get_password("Duke", $SOME_REALM) eq 'secret-Duke', "get works");
 
-ok( $ring->clear_password("Gregory", $SOME_REALM) eq 1, "clear clears");
+    ok( $ring->clear_password("Gregory", $SOME_REALM) eq 1, "clear clears");
 
-ok( ! defined($ring->get_password("Gregory", $SOME_REALM)), "clear cleared");
+    ok( ! defined($ring->get_password("Gregory", $SOME_REALM)), "clear cleared");
 
-ok( $ring->get_password("Paul", $OTHER_REALM) eq 'secret-Paul2', "get works");
+    ok( $ring->get_password("Paul", $OTHER_REALM) eq 'secret-Paul2', "get works");
 
-ok( $ring->get_password("Duke", $SOME_REALM) eq 'secret-Duke', "get works");
+    ok( $ring->get_password("Duke", $SOME_REALM) eq 'secret-Duke', "get works");
 
-ok( $ring->clear_password("Paul", $OTHER_REALM) eq 1, "clear clears");
+    ok( $ring->clear_password("Paul", $OTHER_REALM) eq 1, "clear clears");
 
-ok( $ring->clear_password("Duke", $SOME_REALM) eq 1, "clear clears");
+    ok( $ring->clear_password("Duke", $SOME_REALM) eq 1, "clear clears");
 
-ok( ! defined($ring->get_password("Paul", $SOME_REALM)), "clear cleared");
-ok( ! defined($ring->get_password("Duke", $SOME_REALM)), "clear cleared");
+    ok( ! defined($ring->get_password("Paul", $SOME_REALM)), "clear cleared");
+    ok( ! defined($ring->get_password("Duke", $SOME_REALM)), "clear cleared");
 
-
-
+}

t/05-many-sets-and-gets-with-name.t

 my $PWD2 = "secret-Greg";
 my $PWD4 = "secret-Duke";
 
-my $ring = Passwd::Keyring::KDEWallet->new(app=>"Passwd::Keyring::KDEWallet", group=>"Unit tests (secrets)");
+SKIP: {
 
-ok( defined($ring) && ref $ring eq 'Passwd::Keyring::KDEWallet',   'new() works' );
+    my $ring; 
+    eval {
+        $ring = Passwd::Keyring::KDEWallet->new(app=>"Passwd::Keyring::KDEWallet", group=>"Unit tests (secrets)");
+    }; if($@) {
+        if($@ =~ /^KWallet not available/) {
+            skip "KWallet not available ($@)", 20;
+        } else {
+            die $@;
+        }
+    }
 
-$ring->set_password($USER1, $PWD1, $REALM_B);
-$ring->set_password($USER2, $PWD2, $REALM_B);#
-$ring->set_password($USER1, $PWD1_ALT, $REALM_C);
-$ring->set_password($USER4, $PWD4, $REALM_B);
+    ok( defined($ring) && ref $ring eq 'Passwd::Keyring::KDEWallet',   'new() works' );
 
-ok( 1, "set_password works" );
+    $ring->set_password($USER1, $PWD1, $REALM_B);
+    $ring->set_password($USER2, $PWD2, $REALM_B); #
+    $ring->set_password($USER1, $PWD1_ALT, $REALM_C);
+    $ring->set_password($USER4, $PWD4, $REALM_B);
 
-ok( $ring->get_password($USER1, $REALM_B) eq $PWD1, "get works");
+    ok( 1, "set_password works" );
 
-ok( $ring->get_password($USER2, $REALM_B) eq $PWD2, "get works");
+    ok( $ring->get_password($USER1, $REALM_B) eq $PWD1, "get works");
 
-ok( $ring->get_password($USER1, $REALM_C) eq $PWD1_ALT, "get works");
+    ok( $ring->get_password($USER2, $REALM_B) eq $PWD2, "get works");
 
-ok( $ring->get_password($USER4, $REALM_B) eq $PWD4, "get works");
+    ok( $ring->get_password($USER1, $REALM_C) eq $PWD1_ALT, "get works");
 
-$ring->clear_password($USER1, $REALM_B);
-ok(1, "clear_password works");
+    ok( $ring->get_password($USER4, $REALM_B) eq $PWD4, "get works");
 
-ok( ! defined($ring->get_password($USER1, $REALM_A)), "get works");
+    $ring->clear_password($USER1, $REALM_B);
+    ok(1, "clear_password works");
 
-ok( ! defined($ring->get_password($USER2, $REALM_A)), "get works");
+    ok( ! defined($ring->get_password($USER1, $REALM_A)), "get works");
 
-ok( $ring->get_password($USER2, $REALM_B) eq $PWD2, "get works");
+    ok( ! defined($ring->get_password($USER2, $REALM_A)), "get works");
 
-ok( $ring->get_password($USER1, $REALM_C) eq $PWD1_ALT, "get works");
+    ok( $ring->get_password($USER2, $REALM_B) eq $PWD2, "get works");
 
-ok( $ring->get_password($USER4, $REALM_B) eq $PWD4, "get works");
+    ok( $ring->get_password($USER1, $REALM_C) eq $PWD1_ALT, "get works");
 
-ok( $ring->clear_password($USER2, $REALM_B) eq 1, "clear clears");
+    ok( $ring->get_password($USER4, $REALM_B) eq $PWD4, "get works");
 
-ok( ! defined($ring->get_password($USER2, $REALM_A)), "clear cleared");
+    ok( $ring->clear_password($USER2, $REALM_B) eq 1, "clear clears");
 
-ok( $ring->get_password($USER1, $REALM_C) eq $PWD1_ALT, "get works");
+    ok( ! defined($ring->get_password($USER2, $REALM_A)), "clear cleared");
 
-ok( $ring->get_password($USER4, $REALM_B) eq $PWD4, "get works");
+    ok( $ring->get_password($USER1, $REALM_C) eq $PWD1_ALT, "get works");
 
-ok( $ring->clear_password($USER1, $REALM_C) eq 1, "clear clears");
+    ok( $ring->get_password($USER4, $REALM_B) eq $PWD4, "get works");
 
-ok( $ring->clear_password($USER4, $REALM_B) eq 1, "clear clears");
+    ok( $ring->clear_password($USER1, $REALM_C) eq 1, "clear clears");
 
-ok( ! defined($ring->get_password($USER1, $REALM_C)), "clear cleared");
-ok( ! defined($ring->get_password($USER4, $REALM_B)), "clear cleared");
+    ok( $ring->clear_password($USER4, $REALM_B) eq 1, "clear clears");
 
+    ok( ! defined($ring->get_password($USER1, $REALM_C)), "clear cleared");
+    ok( ! defined($ring->get_password($USER4, $REALM_B)), "clear cleared");
 
-
-
-
+}

t/06-recovering-with-app-change.t

 use strict;
 use warnings;
 use Test::More;
+use Passwd::Keyring::KDEWallet;
 
 if($ENV{DESKTOP_SESSION} || $ENV{DBUS_SESSION_BUS_ADDRESS}) {
-    plan tests => 16;
+    eval { Passwd::Keyring::KDEWallet->new() };
+    unless($@) {
+        plan tests => 16;
+    } elsif($@ =~ /^KWallet not available/) {
+        plan skip_all => "KWallet not available ($@)";
+    } else {
+        plan tests => 16;
+        die $@;
+    }
 } else {
     plan skip_all => "Keyring not available (not running under KDE/Gnome/other desktop session), skipping tests";
 }
 
 
-use Passwd::Keyring::KDEWallet;
-
 my $USER = "Herakliusz";
 my $REALM = "test realm";
 my $PWD = "arcytajne haslo";

t/07-ugly-chars.t

 my $UGLY_PWD =  "«tajne hasło»";
 my $UGLY_REALM = '«do»–main';
 
-my $ring = Passwd::Keyring::KDEWallet->new(app=>"Passwd::KDEWallet::Keyring unit tests", group=>"Ugly chars");
+SKIP: {
 
-ok( defined($ring) && ref $ring eq 'Passwd::Keyring::KDEWallet',   'new() works' );
+    my $ring;
+    eval {
+        $ring = Passwd::Keyring::KDEWallet->new(app=>"Passwd::KDEWallet::Keyring unit tests", group=>"Ugly chars");
+    }; if($@) {
+        if($@ =~ /^KWallet not available/) {
+            skip "KWallet not available ($@)", 4;
+        } else {
+            die $@;
+        }
+    }
 
-$ring->set_password($UGLY_NAME, $UGLY_PWD, $UGLY_REALM);
+    ok( defined($ring) && ref $ring eq 'Passwd::Keyring::KDEWallet',   'new() works' );
 
-ok( 1, "set_password with ugly chars works" );
+    $ring->set_password($UGLY_NAME, $UGLY_PWD, $UGLY_REALM);
 
-ok( $ring->get_password($UGLY_NAME, $UGLY_REALM) eq $UGLY_PWD, "get works with ugly characters");
+    ok( 1, "set_password with ugly chars works" );
 
-ok( $ring->clear_password($UGLY_NAME, $UGLY_REALM) eq 1, "clear clears");
+    ok( $ring->get_password($UGLY_NAME, $UGLY_REALM) eq $UGLY_PWD, "get works with ugly characters");
 
+    ok( $ring->clear_password($UGLY_NAME, $UGLY_REALM) eq 1, "clear clears");
+
+}

t/08-verylong-params.t

 use strict;
 use warnings;
 use Test::More;
+use Passwd::Keyring::KDEWallet;
+
 
 if($ENV{DESKTOP_SESSION} || $ENV{DBUS_SESSION_BUS_ADDRESS}) {
     plan tests => 4;
 }
 
 
-use Passwd::Keyring::KDEWallet;
-
 my $APP = "Passwd::KDEWallet::Keyring unit test 08 ";
 $APP .= "X" x (256 - length($APP));
 my $GROUP = "Passwd::KDEWallet::Keyring unit tests ";
 my $PWD =  "B" x 256;
 my $REALM = 'C' x 256;
 
-my $ring = Passwd::Keyring::KDEWallet->new(
-    app=>$APP, group=>$GROUP);
+SKIP: {
+    my $ring; 
 
-ok( defined($ring) && ref $ring eq 'Passwd::Keyring::KDEWallet',   'new() works with long params' );
+    eval {
+        $ring = Passwd::Keyring::KDEWallet->new(
+            app=>$APP, group=>$GROUP);
+    }; if($@) {
+        if($@ =~ /^KWallet not available/) {
+            skip "KWallet not available ($@)", 4;
+        } else {
+            die $@;
+        }
+    }
 
-$ring->set_password($USER, $PWD, $REALM);
+    ok( defined($ring) && ref $ring eq 'Passwd::Keyring::KDEWallet',   'new() works with long params' );
 
-ok( 1, "set_password with long params works" );
+    $ring->set_password($USER, $PWD, $REALM);
 
-ok( $ring->get_password($USER, $REALM) eq $PWD, "get_password with long params works");
+    ok( 1, "set_password with long params works" );
 
-ok( $ring->clear_password($USER, $REALM) eq 1, "clear_password with long params works");
+    ok( $ring->get_password($USER, $REALM) eq $PWD, "get_password with long params works");
 
+    ok( $ring->clear_password($USER, $REALM) eq 1, "clear_password with long params works");
+
+}
 is already set.
 """
 
-VERSION = "0.2005"
+VERSION = "0.2006"
 
 UPDATED_FILES = [
     "lib/Passwd/Keyring/KDEWallet.pm",
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.