Hi Sean,

I have a solution for you, with just a specific setup of git. It a bit 'by hand', but it should work (at least it worked for me on a private github repository). I'll give you first a reasonable approach (limit the effect to a single repository) and then a global approach (affect all repositories).

First limit the change to one repository:

        1- Clone the repository from bitbucket, removing the username
        in the https url if any(*). It will query for both username and
        password.

        $ git clone https://bitbucket.org/MyName/MyRepository.git
        Cloning into MyRepository
        Username for 'https://bitbucket.org': MyUsername
        Password for 'https://myusern...@bitbucket.org':
        ...

        2- Switch to that repository, and add a credential.helper store
        config option (ask git to store all credentials to a
        .git-credentials file).

        $ cd MyRepository
        $ git config credential.helper 'store'

        3- Do a git pull to get git to store the credentials...

        $ git pull
        Username for 'https://bitbucket.org': MyName
        Password for 'https://myn...@bitbucket.org':
        Already up-to-date.

        4- Do a git pull again: we should not be asked for a username
        or a password again.

        $ git pull
        Already up-to-date.

        5- Add this repository as a gitfiletree repository into Pharo
        (not a remote git). Push and pull now work!

Credential storage will be kept over the project life and apply to other bitbucket repositories with https urls if you do step 2- in them.

The global version is a bit more drastic (will apply to all https based bitbucket repositories, both current and new, if you use the same username), but shorter.

        1- Add a credential.helper store global config option to git
        (ask git to store all credentials to a .git-credentials file).

        $ git config --global credential.helper 'store'

        2- Clone the repository from bitbucket, removing the username
        in the https url if any(*). It will query for both username and
        password.

        $ git clone https://bitbucket.org/MyName/MyRepository.git
        Cloning into MyRepository
        Username for 'https://bitbucket.org': MyUsername
        Password for 'https://myusern...@bitbucket.org':
        ...

        3- Try a git pull in the repository to see that the username
        and password are already stored.

        $ cd MyRepository
        $ git pull
        already up-to-date

        4- Use with GitFileTree and Pharo.

Once the credentials have been stored and the global setting set, Pharo/GitFileTree and Metacello should be able to use https everywhere. If your project has a BaselineOfMyProject, then this should now work:

Metacello new
        baseline: 'MyProject';
repository: 'gitfiletree://bitbucket.org/MyName/MyRepository?protocol=https';
        load

Regards,

Thierry

(*) I'm not sure that removing the MyUsername@ of the urlit is entirely significant or an effect of doing it with a private bitbucket repository, or while logged in into bitbucket.

(**) I just noticed that in fact GitFileTree has full support for https://username:passw...@bitbucket.org/ urls, apart from a stupid bug. Argggg :( (Or the one who asked me for that feature never used it :()



Le 25/07/2016 à 15:58, Sean Glazier a écrit :
Hi,

Thank you for all your help. Yes, windows is a pain. I am using Pharo 5.
I would love to know how to get the ssh part working on Linux as well
since the other team member is a Linux user and it is his first time
using Smalltalk. I think he saw it in college but that was about it. I
have shared the sort of things you can do in Smalltalk compared to other
languages. However, The tool set can be a bit intimidating at times.
There is a learning curve even for experienced small talkers coming from
a different toolset. So when I set it up for myself I want to set his up
as well.

I think while it is insecure the https version is useful especially when
tearing your hair out just trying to get source tree and bit bucket on
speaking terms using ssh. I just spent the better part of a day and
night trying to figure out why when both sides have the right key the
server was still rejecting. It is windoze 10 of course. It should be a
crime to sell that operating system! I have had more fun kicking cinder
blocks with my feet. I mean that literally too, as I used to do that in
the Okinawa Kempo classes. A broken toe is far more pleasant by comparison.

By the time morning rolled around I was having fantasies of making Bill
Gates condemned to rolling a boulder uphill only to have it to always
fall down and he would have to repeat for eternity . :-) But I digress...

If you could point me in the right direction it would help.

Thank you in advance :-)


Kind Regards,

Sean Glazier


On Mon, Jul 25, 2016 at 9:33 AM, Thierry Goubier
<thierry.goub...@gmail.com <mailto:thierry.goub...@gmail.com>> wrote:



    2016-07-25 14:49 GMT+02:00 Sean Glazier <sglazier...@gmail.com
    <mailto:sglazier...@gmail.com>>:

        yes I was using the command generated by the source tree tool.
        The code generates a command line command and that can use https
        if you form the commands as I detailed. I also indicated where
        the master:master and related switches can be replaced with what
        most people use which is just --all. the class forming the
        command can be extended to parse out the username password
        from the url you set it up with provided you include it or it
        could be extra parameters provided and stored. This is so that
        when the push and pull commands put together the url can be
        formed and placed on the command line as well. GITI will take
        care of using https etc. it just needs the url with the username
        password on it so that the command line does not ask for a
        password and hangs the image because Pharo is waiting for a
        response and the command line is waiting for the password to be
        inputted and you have a deadlock as I detailed in the method.


    Yes, I understand that.


        The command line git command that worked for me was:
        git -C "C:\pharo5win\new-qline" -c diff.mnemonicprefix=false -c
        core.quotepath=false
        push 
https://sglazier456:my_passw...@bitbucket.org/sglazier456/new-qline.git
        --all
        I am sure some of the other options are not really needed. As I
        indicated I used what source tree built as its command that it
        executed.

        So with a git repository that needs a username password you can
        form the git push and pull commands as indicated.

        to use ssh I did not see how that could be done from the command
        line on windows unless to were able to tell git to use ssh or
        the putty running on windows. Linux of course, is probably more
        straightforward to get working.


    I know that there is a kind of special way to use ssh-agent in
    Windows, and get this to work.

    I did not implement the https username and password support, because
    I was a bit unsure of writing in clear the username and password,
    and I didn't want to handle the terminal interaction to inject
    username and password into the git command upon request.



        Right now the current version of the git remote repository is
        broken because it is using either old commands or an incorrect
        command. The push was sent to the command line as follows:

        git -C "C:\pharo5win\new-qline"


    I'm sure there is a push in the command otherwise none of the git
    support would work; I use that code every day professionnally for as
    long as GitFileTree existed. The git command has been complete for
    the past few years, so it will stay this way unless harm is proven
    with the lack of certain options.



        This as far as I know is not a proper push command because it
        needs the push keyword followed by at least I think by the --all .
        I tried it from the windows command line and it worked for a
        repository that was not password protected. If it is, the
        command line will ask for the password and will not time out
        which deadlocks the push since pharo is waiting for the command
        to finish, which it cannot. So the image is locked until you
        give it a user interrupt to get the debugger.

        I hope this helps in understanding what I ran into...


    Windows is a hard platform for me to test on; I'll fetch a past
    discussion on ssh-agent on windows and I may create a branch for you
    to test. On which version of Pharo are you?

    Regards,

    Thierry



        Kind Regards,

        Sean Glazier


        On Mon, Jul 25, 2016 at 7:20 AM, Thierry Goubier
        <thierry.goub...@gmail.com <mailto:thierry.goub...@gmail.com>>
        wrote:

            Hi Sean,

            I think the issue is simply that GitFileTree does not
            support https with authentification. You need to switch to
            ssh with keys.

            Now, about the various options you add on the git push
            command line (diff.mnemonicprefix, core.quotepath), could
            you detail them? The seems to be unnecessary in the git
            development scenarios I've seen so far.

            Also note that master:master may be wrong, because you could
            be switching to another branch.

            I expect all those issues to be taken care of through the
            new tools in development for Pharo6.

            Regards,

            Thierry

            2016-07-25 10:04 GMT+02:00 Sean Glazier
            <sglazier...@gmail.com <mailto:sglazier...@gmail.com>>:

                some more information the git command that it runs is
                git -C "C:\pharo5win\new-qline"
                This is run in the method
                MCFileTreeGitRemoteRepository>>runProcessWrapperGitCommand:
                anArrayOfStrings in: aDirectory.

                It is stuck on the line:
                 command waitForExit.

                this wait for exit has no timeout to it and you wait
                forever. I found out on windows the user interrupt is
                alt .  Just like the Mac ;-)

                I have no error in the error stream at all.

                From the source tree tool the command should look more
                like this:
                git -c diff.mnemonicprefix=false -c core.quotepath=false
                push -v --tags origin master:master

                and then followed by the -C "C:\pharo5win\new-qline"

                git -C "C:\pharo5win\new-qline" -c
                diff.mnemonicprefix=false -c core.quotepath=false push
                -v --tags origin master:master

                However doing this from a command line it asks for the
                users password like thus
                C:\pharo5win\New-Qline>git -C "C:\pharo5win\new-qline"
                -c diff.mnemonicprefix=false -c core.quotepath=false
                push -v --tags origin master:master
                Pushing to
                https://sglazier...@bitbucket.org/sglazier456/new-qline.git
                Password for 'https://sglazier...@bitbucket.org':

                to avoid the password prompt you can do this

                git -C "C:\pharo5win\new-qline" -c
                diff.mnemonicprefix=false -c core.quotepath=false
                push https://username:passw...@myrepository.biz/file.git
                -v --tags origin master:master

                you can also replace -v --tags origin master:master
                 with --all as well

                in my case it would look like

                git -C "C:\pharo5win\new-qline" -c
                diff.mnemonicprefix=false -c core.quotepath=false
                push 
https://sglazier456:my_passw...@bitbucket.org/sglazier456/new-qline.git
                -v --tags origin master:master

                OR
                git -C "C:\pharo5win\new-qline" -c
                diff.mnemonicprefix=false -c core.quotepath=false
                push 
https://sglazier456:my_passw...@bitbucket.org/sglazier456/new-qline.git
                -all

                and that works with out the system waiting for a password.

                I notice that there is a class that has the username
                password for bit bucket in the method
                MCGitBasedNetworkRepository >> siteUsername: username
                sitePassword: pass "MCBitbucketRepository siteUsername:
                '' sitePassword: ''" "MCGitHubRepository siteUsername:
                '' sitePassword: ''" self siteUsername: username;
                sitePassword: pass

                I tried setting it up with the username and password in
                the url for the remote repository and no luck.
                the class MCFileTreeGitRemoteRepository should override
                the getPull and gitPush so as to include the url with
                the site name and password or there might be a need for
                a different creation class for the bitbucket remote
                repositories. However it is a standrad git command to be
                able to include the username password in the url.

                when one does a pull as well there is a hang as well for
                the same reasons.

                I am not attempting to hack this at the moment because I
                can use source tree to do the commits and pushes and
                pulls. I do think though since we have those commands
                available on the remote repos and people can mark it
                private requiring a username password.

                Also we should consider a repository configuration that
                specifys the SSH kaey and then run the command in the
                context of SSH. this would eliminate the username
                password issue and it is much more secure.

                SO since you are more experienced than I in this area of
                the code, I should ask how should we go about fixing the
                issue. Also were should I report this issue as well?

                running the command from a cmd line produced the following:
                C:\pharo5win\New-Qline>git -C "C:\pharo5win\new-qline"
                usage: git [--version] [--help] [-C <path>] [-c name=value]
                           [--exec-path[=<path>]] [--html-path]
                [--man-path] [--info-path]
                           [-p|--paginate|--no-pager]
                [--no-replace-objects] [--bare]
                           [--git-dir=<path>] [--work-tree=<path>]
                [--namespace=<name>]
                           <command> [<args>]

                The most commonly used git commands are:
                   add        Add file contents to the index
                   bisect     Find by binary search the change that
                introduced a bug
                   branch     List, create, or delete branches
                   checkout   Checkout a branch or paths to the working tree
                   clone      Clone a repository into a new directory
                   commit     Record changes to the repository
                   diff       Show changes between commits, commit and
                working tree, etc
                   fetch      Download objects and refs from another
                repository
                   grep       Print lines matching a pattern
                   init       Create an empty Git repository or
                reinitialize an existing one
                   log        Show commit logs
                   merge      Join two or more development histories
                together
                   mv         Move or rename a file, a directory, or a
                symlink
                   pull       Fetch from and integrate with another
                repository or a local branch
                   push       Update remote refs along with associated
                objects
                   rebase     Forward-port local commits to the updated
                upstream head
                   reset      Reset current HEAD to the specified state
                   rm         Remove files from the working tree and
                from the index
                   show       Show various types of objects
                   status     Show the working tree status
                   tag        Create, list, delete or verify a tag
                object signed with GPG

                'git help -a' and 'git help -g' lists available
                subcommands and some
                concept guides. See 'git help <command>' or 'git help
                <concept>'
                to read about a specific subcommand or concept.

                C:\pharo5win\New-Qline>


                So according to the help the command it self is
                formulated incorrectly.

                runProcessWrapperGitCommand: anArrayOfStrings in: aDirectory
                "Enclose all parameters with double quotes to protect."

                | r aCommandString |
                aCommandString := String
                streamContents: [ :stream |
                anArrayOfStrings
                do: [ :e |
                stream
                nextPut: $";
                nextPutAll: e;
                nextPutAll: '" ' ] ].
                (Smalltalk at: #ProcessWrapper ifAbsent: [ self error:
                'Please load ProcessWrapper' ])
                ifNotNil: [ :pW |
                | command |
                command := pW new
                useStdout;
                useStderr;
                startWithCommand:
                self gitCommand , ' -C "'
                ,
                (MCFileTreeFileUtils current directoryPathString:
                aDirectory)
                , '" ' , aCommandString;
                yourself.
                command waitForExit.
                self assert: command isRunning not.
                r := command upToEnd.
                command exitCode > 0
                ifTrue:
                [
                | errorString |
                errorString := command errorUpToEnd.
                errorString notEmpty
                ifTrue:
                [ MCFileTreeGitError new signal: 'Git error: ' ,
                errorString ].
                r := '' ] ].
                ^ r


                Kind Regards,

                Sean Glazier


                On Mon, Jul 25, 2016 at 1:01 AM, Sean Glazier
                <sglazier...@gmail.com <mailto:sglazier...@gmail.com>>
                wrote:

                    Yes,

                    I created in Bitbucket a repository named New-QLine.
                    I created aBaselinOfNewQLine which just has stubs. I
                    created 2 Packages. New-Qline and New-Qline-Tests
                    each of these have 3 tags underneath and no classes
                    defined since I wanted to ensure I would have no
                    loading issue and so I can verify committing code
                    and then doing a push and then I also wanted to
                    verify doing a Pull. The picture below is clipped
                    from my pharo5 image.

                    In the window Respository:sglazier456/new-qline.git
                    [master] (Remote Git) shown below. The code at this
                    point has been committed successfully and now I want
                    to Push it to the repository.  Once I hit the Push
                    button the image freezes. I can press the x button
                    on the main Pharo 5 window and I get the dialog do
                    you want to quit with out saving.

                    I am assuming that the push is using a git command.
                    I am not familiar with the Pharo 5 keyboard
                    shortcuts. I tried control b along with some others
                    in hopes of interrupting this process and bringing
                    the image back and being able to debug. However, I
                    was unsuccessful in that. I was thinking that I
                    might need to supply a setting so the ssh session
                    can use the privateKey I generated and then I can be
                    verified and the command continues.

                    I am not sure what is going on yet. I thought I
                    would ask to see if it is something simple I am missing.

                    If you need to I can email you my privateKey so you
                    can try it against the same repository I am using.
                    g...@bitbucket.org:sglazier456/new-qline.git

                    Partial sceen shot showing the repository window is
                    below.

                    Inline image 1

                    Thank you for your help and if you can point me to
                    where I need to added a break point I can provide
                    more information :-)


                    Kind Regards,

                    Sean Glazier


                    On Mon, Jul 25, 2016 at 12:37 AM, Dale Henrichs
                    <dale.henri...@gemtalksystems.com
                    <mailto:dale.henri...@gemtalksystems.com>> wrote:

                        I'd be interested in making this work ... could
                        you supply additional details about the problems
                        you are seeing perhaps we can fix the problems?

                        Dale


                        On 7/24/16 6:42 PM, Sean P. DeNigris wrote:

                            Dale Henrichs-3 wrote

                                Yes, Metacello supports bitbucket://
                                repos...

                            N.B. IIRC I wasn't able to use it for my
                            private projects because it doesn't
                            work with private repos accessed via SSH



                            -----
                            Cheers,
                            Sean
                            --
                            View this message in context:
                            
http://forum.world.st/Can-GitHubcello-be-used-against-BitBucket-tp4907386p4907660.html
                            Sent from the Pharo Smalltalk Users mailing
                            list archive at Nabble.com.











Reply via email to