Hi,

I'll take some minutes to provide an answer as detailed as possible to all
questions in this mail, and to the ones in the mails before.
But first, since I know most people only read the first lines of mails :P,
if you find any concrete iceberg issues, please report them in

https://github.com/pharo-vcs/iceberg/issues

Now, answers inline.

On Tue, May 22, 2018 at 5:15 PM, Tim Mackinnon <tim@testit.works> wrote:

> Hi - last night we managed to explore the new contribution process as well
> as the new iceberg ui at the U.K. Smalltalk meetup last night.
>

Cool!


>
> Not many had seen it before so it was a good test run.
>
> As an initial comment - we need to invest a small amount of time to get
> the right docs in places you expect them as not doing so undoes a lot of
> good work -  the Pharo main site that points to old contribution docs (and
> doesn’t reference the new ones) must be updated ASAP to keep energy high
> (we almost lost a few folks last night by going down the wrong path -
> fortunately Cyril piped up on Discord for me - phew).
>

I know. This is indeed important. I'm trying to get time to make videos,
paste as much info in the wiki. Now, it would be good to know what was
exactly your "wrong path". The more concrete you are, the easier is to fix
it :).
I see Pharo contribution page (http://pharo.org/contribute-propose-fix)
points to
https://github.com/pharo-project/pharo/wiki/Contribute-a-fix-to-Pharo which
is outdated. I'll fix it ASAP.


>
> Armed with the right steps it was straightforward - much easier than the
> older slices mechanism (that I never was comfortable with) - so HUGE thanks
> for that everyone!
>
> As we worked through it, the more git seasoned folks were confused why git
> status in a terminal wasn’t really showing the same info as iceberg (I’ll
> put this in a separate thread to discuss, as it’s an interesting thought
> which I’m sure has lively discussion).
>

Well, this is the discussion in the other thread. If you have read the
glosssary (https://github.com/pharo-vcs/iceberg/wiki/Iceberg-glossary), you
will notice that iceberg presents you with two working copies:
  - the image working copy
  - the disk working copy

The disk working copy is what most people know when they use git. The
directory where you have your repository, with the files you're modifying.

The image working copy represent what is loaded in Pharo. It's important to
differentiate them because if I send you an image (or you download it from
somewhere) you have code loaded on it. This working copy allows us to track
how and where you loaded that code from. That is useful if later on you
want to contribute to that project in some way.

Then there are other questions:

!! Why do we still have a disk working copy?

Well, this is not really necessary for iceberg to work. Iceberg could just
write source code directly on git's BLOB, as Thierry mentioned in the other
thread.
The reason for this working copy to be there is just to try to be less
alien.
Having the disk working copy allows people to still have a way to:
  - edit non-smalltalk files from the command like
  - use the non command line as a last ressource if something goes wrong
with your Pharo image
  - use external tools to manage the repository (sourcetree, git kraken,
whatever you're confortable with)

The idea is that Iceberg will try to keep your disk working copy in sync
with your repository HEAD.
It will take care of transparently synchronizing your disk working copy
when:
 - you commit
 - you change branches
 - you pull/push/merge

!! Why don't we dump code into the disk as we write it?

The main reason behind it is that the image is not causally connected to
the directory in disk, as Ben implied.
There is not a 1 to 1 correspondence between what you could ever have in
disk and your running image.
As Ben mentionned, for this to happen:
 - changing the source code in disk should get automatically loaded into
Pharo
 - changing the source code in Pharo should get automatically written in
disk

The thing is that this is much more difficult than it sounds:
 - What happens if you do not want to save your image, you forgot to save
it or it crashes? Suddenly you will have an image that is not in sync with
your repository. Would you load all changes into your image as soon as you
reopen it? Atomically?
 - What happens if you share your repository between several images?
 - Or if suddenly you change your branch from the command line to something
completely different?

Several of these usecases don't even make sense. So we preferred to choose
the path of "make it explicit".
Of course, we could do better, we are open to discuss any improvements.
Just take into account that Iceberg did not come from an egg :) we have
thought about many possible scenarios and discussed with a lot of people
before.

!! How does merge work?

First, just for the record, merge works. We even
 - detect fast forward merge avoiding the creation of extra merge commits
 - proposing a single UI to resolve all conflicts of a project at once and
not one per package

Now, as Thierry suggested in the other thread, Iceberg's merge happen in
memory. The reason behind this is that using Git's default merge mechanism
would insert the >>>> <<<< markers in the conflicting files. This would
break our parsers and all our tools.
Instead, we ask git for the list of conflicting files, and we build a diff
tree in memory, that we later augment with information such as conflicts.

There are some issues we have seen when merging external files, but as soon
as the two merged commits are not merging external files, but we hope we
will fix them soon.

Missing feature: right now we can only choose between incoming or loaded
version during a merge. It would be nice to be able to edit a method's
code, picking part of the incoming code and part of the current code.

Missing feature 2: right now we resolve all conflicts in memory and commit
them at once. We know some people would like to, instead, not do the merge
automatically, so they can test it before committing. This should not be
tooo difficult to do but it was down in the priority list :).

!! Exporting without commiting?

There is no UI support for this, but it is doable from the backend, though
not correctly exposed right now.

You can right-click on the repository -> Extras -> Inspect

repository index updateDiskWorkingCopy: repository workingCopy
workingCopyDiff.


> Anyway - the new UI does take some getting used to (personally I liked the
> compactness of the original Iceberg and its tabs), but when you understand
> what the different windows show you - I think it makes sense (and hopefully
> is more stable).


Well, the UI rewriting has several ideas behind. I'll put whichever ones
come to my mind in here, I hope Esteban will correct me if I'm wrong:

 - Moving from Glamour to Spec. This is a purely technical decision. AFAIK,
maybe I'm wrong, Glamour is not being maintained anymore by the GT team,
and it has some rough corners that made the old UI difficult to deal with
sometimes. From an investment of time standpoint, we decided to put effort
in Spec instead...
 - Simplify the UI. We needed it to be less overwhelming and sometimes more
direct. That's the why of the toolbar on the top, and the more (but smaller
and simpler) windows.

Regarding the design, Esteban followed some UI guidelines for the design
taken from I don't where. But at the end we are engineers, not UI
designers, so we make ugly UIs by default :P.
Any improvement or concrete suggestion on this direction is welcome :).


> We all missed having an obvious Diff mechanism - we later spotted that
> Commit does show this (Although possibly calling it “Commit…” might make it
> more obvious that you have a chance to review changes and change your mind)
> - but knowing the size of your change and reviewing them without any danger
> of committing something is a useful feature (but maybe a 2.0 enhancement
> request?).
>

Yes, I want that also. I miss
- a Diff/See Changes button.
- that the tabs that show the diffs should maybe say "Diff: XXX to YYY"
instead of just "XXX to YYY"

Could you open an issue?


>
> One small tweak (which I would PR if I knew how to - would be to swap  the
> status and branch columns in the Repository window  to make the status
> clearer (the status gets lost as it sqashed against the normally much
> longer branch name).  Its a simple change to #initializeRepositoryList but
> I guess Iceberg is in a different repository (and not in the instructions
> for contirbutions).
>

Could you open an issue?


>
> We also noticed that if you try to use the “Create Pull Request” menu
> item, you can’t if you have 2FA enabled on Github (the recommended setting)
> as I guess that ssh protocol doesn’t allow this with an ssh key? So I we
> should update the instructions to suggest either using the web ui - or -
> creating an app specific login (that doesn’t use 2fa). - I’ll look at how
> to add that tweak and send a PR.
>

Ouki :)

Thanks!


>
>
> Tim
>
>
> Sent from my iPhone
>



-- 



Guille Polito

Research Engineer

Centre de Recherche en Informatique, Signal et Automatique de Lille

CRIStAL - UMR 9189

French National Center for Scientific Research - *http://www.cnrs.fr
<http://www.cnrs.fr>*


*Web:* *http://guillep.github.io* <http://guillep.github.io>

*Phone: *+33 06 52 70 66 13

Reply via email to