Home > Back-end >  Consider space during Git merge
Consider space during Git merge

Time:11-14

I just realized that Git is ignoring whitespaces during merge by default. However, I would like that Git would consider whitespace during merge. Is there someone that knows how can I configure it?

I tried to install older versions, but I could not find. The steps to install older version on Ubuntu would be nice.

CodePudding user response:

Git should not ignore whitespace during merges, unless:

  • you add -Xignore-all-space (man page)
  • Or those changes were already merged in a previous merge commits
  • or you have defined a merge driver which would ignore whitespace (while a normal native git merge would not)

CodePudding user response:

I just realized that Git is using a new strategy, named ort, and this was generating a different result that allows the context of conflicting chunks also would change (it is described in the documentation https://git-scm.com/docs/git-merge) during the merge. However I used this fact in my algorithm. Thus, changed the strategy to recursive (-s recursive) and this resolved my problem.

I replayed the merge 044a3c of SAIM (https://github.com/dice-group/SAIM) and I had two different answers. Unfortunately, there is no space to show the results in this answer.

For space restrictions, I will show the first conflicting chunk reported for each strategy.

Ort strategy

        selfconfig.setEnabled(true);
    }

<<<<<<< HEAD
        private void performPropertyMapping() {
            Configuration config = Configuration.getInstance();
            config.getSource().properties.clear();
            config.getTarget().properties.clear();
            PropertyMapper propMapper = new PropertyMapper();
            String classSource = config.getSource().getClassOfendpoint();
            String classTarget = config.getTarget().getClassOfendpoint();
            if(classSource != null && classTarget != null) {
                showErrorMessage("Getting property mapping...");
                propMapping = propMapper.getPropertyMapping(config.getSource().endpoint,
                        config.getTarget().endpoint, classSource, classTarget);
                for(String s : propMapping.map.keySet())
                    for(Entry<String, Double> e : propMapping.map.get(s).entrySet()) {
                        System.out.println(s   " - "   e.getKey());
                        String s_abr=PrefixHelper.abbreviate(s);
                        sourceProps.add(s_abr);
                        config.getSource().properties.add(s_abr);
                        config.getSource().prefixes.put(PrefixHelper.getPrefixFromURI(s_abr), PrefixHelper.getURI(PrefixHelper.getPrefixFromURI(s_abr)));
                        System.out.println("Adding source property: " s_abr "::::" PrefixHelper.getPrefixFromURI(s_abr) " -- " PrefixHelper.getURI(PrefixHelper.getPrefixFromURI(s_abr)));
                        targetProps.add(PrefixHelper.abbreviate(e.getKey()));
                        String t_abr=PrefixHelper.abbreviate(e.getKey());
                        config.getTarget().properties.add(t_abr);
                        config.getTarget().prefixes.put(PrefixHelper.getPrefixFromURI(t_abr), PrefixHelper.getURI(PrefixHelper.getPrefixFromURI(t_abr)));
                        System.out.println("Adding target property: " t_abr "::::" PrefixHelper.getPrefixFromURI(t_abr) " -- " PrefixHelper.getURI(PrefixHelper.getPrefixFromURI(t_abr)));
=======

    /**
     * Little helper function to retrieve classes out of restrictions of the LIMES SPEC. Whereas, a
     * class is in a restriction of the format "?var rdf:type <class>".
     * @param ep
     * @return
     */
    private String getClassOfEndpoint(KBInfo ep) {
        for(String rest : ep.restrictions) {
            if(rest.matches(".* rdf:type .*"))
                return rest.substring(rest.indexOf("rdf:type") 8).replaceAll("<", "").replaceAll(">", "").trim();
        }
        return null;
    }

    private void showErrorMessage(String message) {
        layout.setComponentError(new UserError(message));
    }

    public boolean isValid() {
        manualMetricForm.validate();
        if(manualMetricForm.isValid()) {
            Configuration.getInstance().setMetricExpression(manualMetricForm.metricTextField.getValue().toString());
            Configuration.getInstance().setAcceptanceThreshold(Double.parseDouble(manualMetricForm.thresholdTextField.getValue().toString()));
            return true;
        } else {
            manualMetricForm.setComponentError(new UserError("Please insert something..."));
        }
        return false;
    }

    public class SelfConfigClickListener implements Button.ClickListener {
        Layout l;
        public SelfConfigClickListener(Layout l) {
            this.l=l;
        }
        @Override
        public void buttonClick(ClickEvent event) {
            // add all properties
            for(String s : sourceProps) {
                Configuration.getInstance().getSource().properties.add(s);
                Configuration.getInstance().getSource().prefixes.put(PrefixHelper.getPrefixFromURI(s), PrefixHelper.getURI(PrefixHelper.getPrefixFromURI(s)));
                Configuration.getInstance().getSource().functions.put(s, "");
            }
            for(String s : targetProps) {
                Configuration.getInstance().getTarget().properties.add(s);
                Configuration.getInstance().getTarget().prefixes.put(PrefixHelper.getPrefixFromURI(s), PrefixHelper.getURI(PrefixHelper.getPrefixFromURI(s)));
                Configuration.getInstance().getTarget().functions.put(s, "");
            }
            // run selfconfig
            l.removeAllComponents();
            Refresher refresher = new Refresher();
            SelfConfigRefreshListener listener = new SelfConfigRefreshListener();
            refresher.addListener(listener);
            addComponent(refresher);

            final ProgressIndicator indicator = new ProgressIndicator();
            indicator.setCaption("Progress");
            l.addComponent(indicator);
            indicator.setImmediate(true);

            final Panel stepPanel = new Panel("Starting self configuration");
            l.addComponent(stepPanel);

            new Thread() {
                public void run() {

                    float steps = 5f;
                    indicator.setValue(new Float(1f/steps));
                    indicator.requestRepaint();
                    stepPanel.setCaption("Getting source cache...");
                    HybridCache sourceCache = HybridCache.getData(Configuration.getInstance().getSource());
                    indicator.setValue(new Float(2f/steps));
                    indicator.requestRepaint();
                    stepPanel.setCaption("Getting target cache...");
                    HybridCache targetCache = HybridCache.getData(Configuration.getInstance().getTarget());
                    indicator.setValue(new Float(3f/steps));
                    stepPanel.setCaption("Performing self configuration...");
                    MeshBasedSelfConfigurator bsc = new MeshBasedSelfConfigurator(sourceCache, targetCache, 0.6, 0.5);
                    List<SimpleClassifier> cp = bsc.getBestInitialClassifiers();                        
                    indicator.setValue(new Float(4f/steps));
                    stepPanel.setCaption("Performed self configuration:");
                    for(SimpleClassifier cl : cp) {
                        System.out.println(cl);
>>>>>>> bbb3f6b
                    }

                }

Recursive strategy

        final int WIDTH = 800;
        final int NODESIZE = 100;

<<<<<<< HEAD
        private void performPropertyMapping() {
            Configuration config = Configuration.getInstance();
            config.getSource().properties.clear();
            config.getTarget().properties.clear();
            PropertyMapper propMapper = new PropertyMapper();
            String classSource = config.getSource().getClassOfendpoint();
            String classTarget = config.getTarget().getClassOfendpoint();
            if(classSource != null && classTarget != null) {
                showErrorMessage("Getting property mapping...");
                propMapping = propMapper.getPropertyMapping(config.getSource().endpoint,
                        config.getTarget().endpoint, classSource, classTarget);
                for(String s : propMapping.map.keySet())
                    for(Entry<String, Double> e : propMapping.map.get(s).entrySet()) {
                        System.out.println(s   " - "   e.getKey());
                        String s_abr=PrefixHelper.abbreviate(s);
                        sourceProps.add(s_abr);
                        config.getSource().properties.add(s_abr);
                        config.getSource().prefixes.put(PrefixHelper.getPrefixFromURI(s_abr), PrefixHelper.getURI(PrefixHelper.getPrefixFromURI(s_abr)));
                        System.out.println("Adding source property: " s_abr "::::" PrefixHelper.getPrefixFromURI(s_abr) " -- " PrefixHelper.getURI(PrefixHelper.getPrefixFromURI(s_abr)));
                        targetProps.add(PrefixHelper.abbreviate(e.getKey()));
                        String t_abr=PrefixHelper.abbreviate(e.getKey());
                        config.getTarget().properties.add(t_abr);
                        config.getTarget().prefixes.put(PrefixHelper.getPrefixFromURI(t_abr), PrefixHelper.getURI(PrefixHelper.getPrefixFromURI(t_abr)));
                        System.out.println("Adding target property: " t_abr "::::" PrefixHelper.getPrefixFromURI(t_abr) " -- " PrefixHelper.getURI(PrefixHelper.getPrefixFromURI(t_abr)));
                    }
            } else {
                showErrorMessage("Cannot perform automatic property mapping due to missing class specifications.");
            }       
        }
=======
        Cytoscape.createNewSession();   
        String name = "MyName";
        CyNetwork cyNetwork = Cytoscape.createNetwork(name, false);     
        cyNetworkView = Cytoscape.createNetworkView(cyNetwork);

        cytographer = new Cytographer(cyNetwork, cyNetworkView, name, WIDTH, HEIGHT);
        cytographer.setImmediate(true);
        cytographer.setWidth(WIDTH   "px");
        cytographer.setHeight(HEIGHT   "px");
        cytographer.setTextVisible(true);       
        cytographer.setNodeSize(NODESIZE, true);    
>>>>>>> bbb3f6b
        
        return cytographer;     
    }
    

I'm not judging which is the better result, just the one that works for algorithm I implemented.

Thanks!
Gleiph

  • Related